是否可以从存在Azure功能的同一文件夹中读取文件

Ani*_*pta 8 c# azure azure-storage azure-functions

在我的Azure C#函数中,我需要读取.txt文件.我在Visual Studio中创建.txt文件并将其设置为"始终复制".

现在我使用此代码来读取文件

var dir = System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetEntryAssembly().Location);

var path = System.IO.Path.Combine(dir, "twinkle.txt");
Run Code Online (Sandbox Code Playgroud)

这段代码不起作用.当我打开文件夹,这是dir的值.这使我这个目录下的 "" C:\用户{用户名} \应用程序数据\本地\ Azure.Functions.Cli\1.0.9 ""

如何在Azure功能中存储简单的txt文件.或者我需要Azure存储.

我还能做些什么来完成这件事.

显示复制文件的更新

在此输入图像描述

Lou*_*eda 28

对于像我这样无权访问的人,ExecutionContext因为我们必须读取Startup.

var binDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var rootDirectory = Path.GetFullPath(Path.Combine(binDirectory, ".."));

///then you can read the file as you would expect yew!
File.ReadAllText(rootDirectory + "/path/to/file.ext");
Run Code Online (Sandbox Code Playgroud)

还值得注意的是,它Environment.CurrentDirectory可能适用于本地环境,但在部署到 Azure 时将无法使用。

也适用于函数内部。

参考

  • 对于包含 FirebaseAdmin 功能所需的 Google.json 文件非常有用!谢谢,路易! (3认同)

Mik*_*kov 21

以下是如何访问正确的文件夹:

public static HttpResponseMessage Run(HttpRequestMessage req, ExecutionContext context)
{
    var path = System.IO.Path.Combine(context.FunctionDirectory, "twinkle.txt");
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这会将您带到包含function.json文件的文件夹.如果你需要到达bin文件夹,你可能需要升级1级,然后追加bin:

// One level up
Path.GetFullPath(Path.Combine(context.FunctionDirectory, "..\\twinkle.txt"))

// Bin folder
Path.GetFullPath(Path.Combine(context.FunctionDirectory, "..\\bin\\twinkle.txt"))
Run Code Online (Sandbox Code Playgroud)

  • 我不相信我在启动时有权访问“ExecutionContext”。还有其他方法可以做到这一点吗? (5认同)
  • `context.FunctionAppDirectory` 允许您访问应用程序根文件夹中的任何内容 `context.FunctionDirectory` 仅允许您访问特定于函数的目录 (2认同)