Azure和File.CreateText:FileNotFoundException:找不到文件

时间:2019-07-19 18:07:54

标签: azure asp.net-core createfile

我有一个简单的.Net Core MVC Web应用程序,可以将其部署到Azure。在该应用程序中,我正在使用File.CreateText()创建一个名为“ test.txt”的小文本文件。

在我的本地PC上,这可以正常工作,但是当我将其部署到Azure时,我收到一条奇怪的消息:“找不到文件'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")) { }
}

错误截图:

enter image description here

2 个答案:

答案 0 :(得分:0)

最好的方法是使用博客存储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

答案 1 :(得分:0)

发布此问题后不久,我发现了此错误的原因,但忘记发布答案:

事实证明,当您部署到Azure时,您的站点从一个临时目录运行,该目录在您每次部署时都会被擦除并重新创建。因此,Azure会禁用应用程序目录中文件的创建和编辑,因为它们将在下次部署时被擦除(如果Azure所显示的错误消息更具参考性,那会很好)。

因此,在Azure应用上创建和编辑文件并使它们在部署中持久保存的方法是使用以下方法之一:

  1. 数据库BLOB存储(将文件作为字节数组存储在数据库中。如果您已经在使用数据库,则不会花费任何金钱)
  2. Azure BLOB存储(将文件存储到Azure上的特殊云中。要花钱)

发布此问题后不久,我在某个网站上阅读了此内容,但我不记得在哪里,所以对于没有原始资料的人表示歉意。