2009-01-26 88 views

回答

5
class Program 
    { 
     static void Main(string[] args) 
     { 
      FileSystemWatcher fsw = new FileSystemWatcher(@"c:\temp"); 
      fsw.Changed += new FileSystemEventHandler(fsw_Changed); 
      fsw.Deleted += new FileSystemEventHandler(fsw_Deleted); 
      fsw.Renamed += new RenamedEventHandler(fsw_Renamed); 
      fsw.Created += new FileSystemEventHandler(fsw_Created); 
      fsw.EnableRaisingEvents = true; 
      Console.ReadLine(); 
     } 

     static void fsw_Created(object sender, FileSystemEventArgs e) 
     { 
      Console.WriteLine("{0} was created", e.FullPath); 
     } 

     static void fsw_Renamed(object sender, RenamedEventArgs e) 
     { 
      Console.WriteLine("{0} was Renamed", e.FullPath); 
     } 

     static void fsw_Deleted(object sender, FileSystemEventArgs e) 
     { 
      Console.WriteLine("{0} was Deleted", e.FullPath); 
     } 

     static void fsw_Changed(object sender, FileSystemEventArgs e) 
     { 
      Console.WriteLine("{0} was Changed", e.FullPath); 
     } 
} 
11

您可以使用FileSystemWatcher對象。這會引發更改指定觀看文件夾內文件的事件。

+1

檢查MSDN文檔,根據您嘗試觀看的文件數量,存在內存泄漏和/或內存不足異常的可能性。從.net開始,做這件事的最好方法就是ck的答案。 – Spence 2009-01-26 08:42:02

3

Microsoft Windows及其最終祖先MS-DOS始終在其文件上有一個屬性,指示該屬性自上次清除屬性時是否發生了更改,該屬性是「髒標誌」。過去,備份程序使用它來查找那些需要逐步備份的文件,然後在製作該文件的副本時清除這些文件。

您可以使用File.GetAttributes獲取文件上的屬性,並使用File.SetAttributes清除「存檔」屬性。下一次打開該文件進行寫入時,該歸檔標誌將被重新設置。

請注意複製已更改的文件,因爲這些文件可能仍處於打開狀態。您可能希望通過在複製時打開它們以單獨讀取來避免併發性問題,並且如果失敗,則您知道該文件仍處於寫入狀態。

3

對於所有回覆的人來說,使用FileSystemWatcher,您如何處理您的應用程序未運行的時間?例如,用戶重新啓動了該框,修改了您感興趣的文件,然後啓動您的應用程序?

請務必仔細閱讀關於FileSystemWatcher Class的文檔,特別是關於事件和緩衝區大小的部分。

+0

他們想要.Net解決方案。這可以在自動啓動的服務或自動啓動的系統托盤應用程序中實現等等。這取決於OP進一步研究,但這會讓他們開始。 – cjk 2009-01-26 10:04:05

0

你必須要注意修改你想檢查的文件的日期。 經過一段時間後,您可以檢查文件是否稍後修改。 如果文件使用不同的日期和時間進行修改,則可以進行復制。

相關問題