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

时间:2018-04-01 11:50:50

标签: 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");

此代码不起作用。当我打开文件夹,这是dir的值。它引导我到这个目录“”C:\ Users {username} \ AppData \ Local \ Azure.Functions.Cli \ 1.0.9“”

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

我可以做的任何事情来完成这件事。

显示复制文件的更新

enter image description here

3 个答案:

答案 0 :(得分:19)

对于像我这样无权访问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");

还值得注意的是,Environment.CurrentDirectory可能在本地环境中可用,但是在部署到Azure时将不可用。

也可以在函数内部工作。

Reference

答案 1 :(得分:14)

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

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

这会将您带到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"))

答案 2 :(得分:-1)

以下是有用的链接:https://github.com/Azure/azure-functions-host/wiki/Retrieving-information-about-the-currently-running-function

有可能采用硬编码方式:

File.ReadAllText("d:\home\site\wwwroot\NameOfYourFunction" + "/path/to/file.ext");