Azure 和 File.CreateText:FileNotFoundException:找不到文件
Azure and File.CreateText: FileNotFoundException: Could not find file
我有一个部署到 Azure 的简单 .Net Core MVC Web 应用程序。在应用程序中,我正在使用 File.CreateText() 创建一个名为 "test.txt" 的小文本文件。这在我的本地 PC 上运行良好,但是当我将它部署到 Azure 时,我收到一条奇怪的消息:"Could not find file 'D:\home\site\wwwroot\wwwroot\test.txt'."
确实,该文件不存在——这就是我创建它的原因。此外,SO 上的其他人似乎也有类似的问题:FileNotFoundException when using System.IO.Directory.CreateDirectory()
难道我没有写权限?为什么 Azure 不允许我创建文件?
代码(在Startup.cs):
public void Configure(IApplicationBuilder app, IHostingEnvironment env){
using (var sw = File.CreateText(env.WebRootPath + "/test.txt")) { }
}
错误截图:
最好的方法是使用博客存储 AZURE 来执行此操作。但是您可以尝试以这种方式保存在根目录中:
static void Main(string[] args)
{
// Create a string with a line of text.
string text = "First line" + Environment.NewLine;
// Set a variable to the Documents path.
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
// Write the text to a new file named "WriteFile.txt".
File.WriteAllText(Path.Combine(docPath, "WriteFile.txt"), text);
// Create a string array with the additional lines of text
string[] lines = { "New line 1", "New line 2" };
// Append new lines of text to the file
File.AppendAllLines(Path.Combine(docPath, "WriteFile.txt"), lines);
}
参考:https://docs.microsoft.com/pt-br/dotnet/standard/io/how-to-write-text-to-a-file
我在 post 回答这个问题后不久就找到了这个错误的原因,但忘了 post 答案:
事实证明,当您部署到 Azure 时,您的站点从一个临时目录运行,每次部署时该目录都会被擦除并重新创建。因此,Azure 禁止在应用程序目录中创建和编辑文件,因为它们将在您的下一次部署时被擦除(如果 Azure 显示的错误消息能提供更多信息,那就太好了)。
因此,在 Azure 应用程序上创建和编辑文件并让它们在部署中持久存在的方法是使用以下方法之一:
- 数据库 BLOB 存储(只需将文件作为字节数组存储在数据库中。如果您已经在使用数据库,则不需要任何费用)
- Azure BLOB 存储(将您的文件存储到 Azure 上的特殊云。需要花钱)
我在 post 提出这个问题后不久在某个网站上读到了这篇文章,但我不记得在哪里,所以我很抱歉没有来源。
我有一个部署到 Azure 的简单 .Net Core MVC Web 应用程序。在应用程序中,我正在使用 File.CreateText() 创建一个名为 "test.txt" 的小文本文件。这在我的本地 PC 上运行良好,但是当我将它部署到 Azure 时,我收到一条奇怪的消息:"Could not find file 'D:\home\site\wwwroot\wwwroot\test.txt'."
确实,该文件不存在——这就是我创建它的原因。此外,SO 上的其他人似乎也有类似的问题:FileNotFoundException when using System.IO.Directory.CreateDirectory()
难道我没有写权限?为什么 Azure 不允许我创建文件?
代码(在Startup.cs):
public void Configure(IApplicationBuilder app, IHostingEnvironment env){
using (var sw = File.CreateText(env.WebRootPath + "/test.txt")) { }
}
错误截图:
最好的方法是使用博客存储 AZURE 来执行此操作。但是您可以尝试以这种方式保存在根目录中:
static void Main(string[] args)
{
// Create a string with a line of text.
string text = "First line" + Environment.NewLine;
// Set a variable to the Documents path.
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
// Write the text to a new file named "WriteFile.txt".
File.WriteAllText(Path.Combine(docPath, "WriteFile.txt"), text);
// Create a string array with the additional lines of text
string[] lines = { "New line 1", "New line 2" };
// Append new lines of text to the file
File.AppendAllLines(Path.Combine(docPath, "WriteFile.txt"), lines);
}
参考:https://docs.microsoft.com/pt-br/dotnet/standard/io/how-to-write-text-to-a-file
我在 post 回答这个问题后不久就找到了这个错误的原因,但忘了 post 答案:
事实证明,当您部署到 Azure 时,您的站点从一个临时目录运行,每次部署时该目录都会被擦除并重新创建。因此,Azure 禁止在应用程序目录中创建和编辑文件,因为它们将在您的下一次部署时被擦除(如果 Azure 显示的错误消息能提供更多信息,那就太好了)。
因此,在 Azure 应用程序上创建和编辑文件并让它们在部署中持久存在的方法是使用以下方法之一:
- 数据库 BLOB 存储(只需将文件作为字节数组存储在数据库中。如果您已经在使用数据库,则不需要任何费用)
- Azure BLOB 存储(将您的文件存储到 Azure 上的特殊云。需要花钱)
我在 post 提出这个问题后不久在某个网站上读到了这篇文章,但我不记得在哪里,所以我很抱歉没有来源。