2011-11-17 53 views
0

我正在使用FileSystemWatcher監控文件夾並刪除在該文件夾下創建的文件。但我的應用程序拋出我的異常:刪除由Filesystemwatcher引發的事件中的文件

文件正被另一個應用程序

ifsXmlFileWatcher.Path = "D:\\"; 
ifsXmlFileWatcher.IncludeSubdirectories = false; 
ifsXmlFileWatcher.EnableRaisingEvents = true; 
ifsXmlFileWatcher.Created += new FileSystemEventHandler(IfsFileUpload); 

private void IfsFileUpload(object sender, System.IO.FileSystemEventArgs e) 
{ 
    try 
    {    
     {    
      File.Delete(e.FullPath); 
     } 
    } 
    catch (Exception exp) 
    { 
     MessageBox.Show(exp.Message); 
    } 
} 

可能是什麼問題?

+3

的問題是,它得到了一些程序創建的文件仍在使用該程序,並上有排它鎖。 –

回答

0

問題所在您還知道「文件正被另一個應用程序使用」。 因此,它可能是您自己的應用程序在您的使用環境中使用它或其他應用程序。 可能的解決方案可能是 您可以繼續嘗試刪除一定次數,我在這裏嘗試5次,然後在某處放棄/寫入事件或顯示消息。我在這裏張貼類似的回答如果有人需要作出複製文件肯定是成功How to know that File.Copy succeeded?

private void IfsFileUpload(object sender, System.IO.FileSystemEventArgs e) 
{ 
    bool done = false; 
    string file = e.FullPath; 

    int i = 0; 

    while (i < 5) 
    { 
    try 
    { 

     System.IO.File.Delete(file); 
     i = 5; 
     done = true; 
    } 
    catch (Exception exp) 
    { 
     System.Diagnostics.Trace.WriteLine("File trouble " + exp.Message); 
     System.Threading.Thread.Sleep(1000); 
     i++; 
    } 

    } 
    if (!done) 
    MessageBox.Show("Failed to delte file " + file); 

} 
1

我想這是一個計時問題。 FileSystemWatcher在創建文件時立即觸發它的創建事件。這並不意味着所有的內容都會被寫入文件,並且會再次關閉。所以它只是由創建它的進程訪問,因爲該進程尚未完成寫入。

要刪除它,您必須等到寫入完成。

相關問題