我有一個程序需要在寫入目錄後立即從目錄加載文件。我得到了FileSystemWatcher來通知我對目錄的更改。而不是檢查事件是否發生了變化,我只列出這些文件並開始處理所有發現的內容。在寫入文件之後立即讀取文件我得到全零(.net)
爲了防止嘗試讀取它仍然被寫入我有這樣的代碼文件:
try {
fs = fi.Open(FileMode.Open, FileAccess.ReadWrite,
FileShare.None);
message = new byte[fs.Length];
int br = fs.Read(message, 0, (int)fi.Length);
}
catch (Exception e) {
// I'll get it next time around
return;
}
finally {
if (fs != null)
fs.Close();
}
的問題是,對於某些文件,在200約1時,程序讀取全部爲零。文件長度是正確的,但內容看起來都是零字節。當我檢查後面的文件時,我發現它確實包含實際的正確數據。我認爲我打開文件的方式可以防止過早訪問文件。
我使用DOS命令'copy InFile_0 * dropdir'(每次執行大約100個文件)將文件複製到目錄中進行測試。可能此命令在兩個步驟中執行副本:1)分配空間和2)填充空間和我的程序偶爾會跳到兩個中間。
有關如何對此進行編碼以確保可靠性的任何想法?
更新:我無法控制寫程序 - 它可能是任何東西。看起來我必須防守編碼。
提示:爲您的異常添加日誌記錄。不要默默地失敗。 – Amy 2011-01-20 00:03:32
您正在使用不會對該文件施加任何鎖定的程序。例如,對於C程序來說通用,fopen()允許任何程序在文件打開時讀寫。贏得超越「等待一段時間」的方式並不多。 – 2011-01-20 01:20:43