0

我正在使用 c# 在 Visual Studio 中编写应用程序。我想检查 readalltext 是否正确找到文件,如果没有,则需要创建文件并在其中输入零。在伪代码中:

  if(x=File.ReadAllText("file.txt")==NULL)
  {
    File.WriteAllText("file.txt", "0");
    x=File.ReadAllText("file.txt");
  }

我怎样才能做到这一点?在此先感谢,我尝试了一些谷歌,但我可能输入了错误的关键字

4

2 回答 2

2

您可以使用该方法检查文件是否存在File.Exists()

string path = "file.txt";

if (!File.Exists(path))
{
    File.WriteAllText(path, "0");
}
于 2021-04-19T10:25:38.433 回答
1

使用的问题File.Exist()是在进行检查后存在创建或删除文件的风险。风险可能很小,但可能仍需要处理。处理此问题的一种方法是在循环中使用 try/catch:

        while (true)
        {
            try
            {
                if (!File.Exists(path))
                {
                    File.WriteAllText(path, "0");
                    return "0";
                }
                else
                {
                    return File.ReadAllText(path);
                }
            }
            catch (IOException)
            {
                // try again
            }
        }

另一种方法是跳过ReadAllText并打开一个文件流。如果成功,您就知道您拥有对该文件的独占访问权限,可以读取或写入该文件:

        try
        {
            using var fs = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
            if (fs.Length == 0)
            {
                using var sw = new StreamWriter(fs);
                sw.Write('0');
                return "0";
            }
            else
            {
                using var sr = new StreamReader(fs);
                return sr.ReadToEnd();
            }
        }
        catch (Exception)
        {
            // Handle the various types of exception that may occur.
        }
于 2021-04-19T11:37:59.317 回答