问题描述
我正在使用 c# 在 Visual Studio 中编写应用程序。我想检查 readalltext 是否正确找到了文件,如果没有,则需要创建文件并在其中放置一个零。在伪代码中:
if(x=File.ReadAllText("file.txt")==NULL)
{
File.WriteallText("file.txt","0");
x=File.ReadAllText("file.txt");
}
我该怎么做?在此先感谢,我尝试了一些谷歌,但我可能输入了错误的关键字
解决方法
您可以使用 File.Exists()
方法检查文件是否存在。
string path = "file.txt";
if (!File.Exists(path))
{
File.WriteAllText(path,"0");
}
,
使用 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.
}