2013-10-16 242 views
1

我監視新文件的文件夾,並在新的文件存在我讀(和一個txt保存)文件如下未鎖定:文件只有當複製/粘貼,如果剪切/粘貼

FileStream file = File.Open(this.filePath, FileMode.Open, FileAccess.Read); 
StreamReader reader = new System.IO.StreamReader(file); 
string text = reader.ReadToEnd(); 
reader.Close(); 

如果我複製/粘貼文件夾中的源文件,我收到一個IOExcpetion,告訴我該文件被另一個進程使用。 如果我在文件夾中剪切/粘貼,所有的作品。 此外鎖定問題也會發生如果我複製(但也切入這種情況下)/從另一臺機器粘貼文件到受監視的文件夾中。

你知道發生了什麼嗎?

有一種更安全的方式來訪問文件,以避免這種類型的鎖?

謝謝!

+0

你是如何監控folder..Show我們code..Are您使用FileSystemWatcher的前實現這一點? – Anirudha

+0

我正在使用FileSystemWatcher(在一個包裝類中爲了監視多個文件夾) – ff8mania

+0

很可能與您的'FileSystemWatcher'有衝突!向我們展示代碼 – Anirudha

回答

0

這是我確保文件完成複製或不被另一個進程使用的一小段代碼。

private bool FileUploadCompleted(string filename) 
    { 
     try 
     { 
      using (FileStream inputStream = File.Open(filename, FileMode.Open, 
       FileAccess.Read, 
       FileShare.None)) 
      { 
       return true; 
      } 
     } 
     catch (IOException) 
     { 
      return false; 
     } 
    } 

然後您可以將流程邏輯

while (!FileUploadCompleted(filePath)) 
{ 
    //if the file is in use it will enter here 
    //So you could sleep the thread here for a second or something to allow it some time 
    // Also you could add a retry count and if it goes past the allotted retries you 
    // can break the loop and send an email or log the file for manual processing or 
    // something like that 

}