在我的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存储。
我可以做的任何事情来完成这件事。
显示复制文件的更新
答案 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时将不可用。
也可以在函数内部工作。
答案 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)
有可能采用硬编码方式:
File.ReadAllText("d:\home\site\wwwroot\NameOfYourFunction" + "/path/to/file.ext");