2
我试图只在文件存在时才打开FileStream
,否则做别的事情(不创建它,所以FileMode.OpenOrCreate
不适用)。原子检查一个文件是否存在并打开它
然而,简单地创建FileStream
不会阻止竞争条件为FileStream
,必须创建一个机会,在这种情况下FileNotFoundException
将被抛出之前文件就可以删除之前检查File.Exists
。
有没有办法实现这个“原生地”,而不诉诸以下尝试捕捉包装:
/// <returns>false if the file does not exists, true otherwise.</returns>
public static bool TryOpenFileStreamIfExists(string filePath, FileAccess fileAccess, FileShare fileShare, out FileStream fs, FileOptions fileOptions = FileOptions.None) {
try {
if (!File.Exists(filePath)) {
fs = null;
return false;
}
fs = new FileStream(filePath, FileMode.Open, fileAccess, fileShare, short.MaxValue, fileOptions);
return true;
}
catch (FileNotFoundException) {
fs = null;
return false;
}
}
这种情况下try/catch包装器有什么问题? –
这似乎是一个合适的解决方案。 File.Exist调用将处理大多数情况,捕获将处理特例。 – Dennisch