2015-10-20 60 views
0

我有一個FileSystemWatcher,它跟蹤是否創建了新文件。如果是,我有一個方法讀取文件,並做一些事情..
在下面的代碼中,我得到一個FileNotFoundException,但路徑/文件確實存在!我已經檢查過路徑,文件名等。不知道爲什麼它找不到該文件。
另外在調試模式下,我驗證路徑變量正確的道路,但是,當我強迫它繼續下去,不知何故,運行,但不幸的是在釋放模式停止..爲什麼我在文件存在時得到FileNotFoundException

using (StreamReader reader = new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.Default)) 
{ 
    //my code 
} 

我的錯誤得到的是

類型的未處理的異常 'System.IO.FileNotFoundException' 出現在mscorlib.dll其他信息:找不到文件 「myPathHere

任何人都可以幫忙?

+0

的路徑是完全正確的時候等待一點?如果您將路徑複製並粘貼到Windows資源管理器中,它是否顯示在那裏? –

+1

FileSystemWatcher可能會令人不安。當您的代碼試圖打開它時,該文件可能不在那裏。試圖打開它之前,您是否嘗試過調用File.Exists()? –

+0

我認爲這也可能是一個安全問題,請參閱http://stackoverflow.com/a/10676402/704281 – Waescher

回答

0

FileSystemWatcher告訴你何時創建一個文件,是的。但這並不意味着該文件在這一點上完成了寫作 - 它當然不是。當您逐步完成代碼時,您將爲其他進程提供寫入和關閉文件所需的時間 - 最終,這是一個併發問題,調試時很難再現併發問題。以同樣的方式,當你手動檢查時,文件很長時間 - 問題在於時間。可悲的是,當文件關閉時(無法使用FileSystemWatcher爲您提供備註),因此您的應用程序可以使用該文件。

您需要等到該文件是實際完成 - 一個簡單的循環試圖打開該文件,並沒有應工作不夠好:)

+0

我認爲你是對的,暫時無法識別文件夾。我會檢查你的解決方案,並回復你 –

+0

所以,你的建議幫了我很多。我把fileSystemWatcher放入一個if(File.Exists(e.FullPath)){myMethod()},現在它工作正常!謝謝! –

相關問題