使用的问题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.
}