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