我正在尋找一種方法來確定特定文件何時發生更改,通過.NET。 (我最終想要的是一旦它發生更改就會生成該文件副本的功能。)如何完成此操作?如何判斷文件是否已通過.NET更改?
回答
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);
}
}
您可以使用FileSystemWatcher對象。這會引發更改指定觀看文件夾內文件的事件。
Microsoft Windows及其最終祖先MS-DOS始終在其文件上有一個屬性,指示該屬性自上次清除屬性時是否發生了更改,該屬性是「髒標誌」。過去,備份程序使用它來查找那些需要逐步備份的文件,然後在製作該文件的副本時清除這些文件。
您可以使用File.GetAttributes獲取文件上的屬性,並使用File.SetAttributes清除「存檔」屬性。下一次打開該文件進行寫入時,該歸檔標誌將被重新設置。
請注意複製已更改的文件,因爲這些文件可能仍處於打開狀態。您可能希望通過在複製時打開它們以單獨讀取來避免併發性問題,並且如果失敗,則您知道該文件仍處於寫入狀態。
對於所有回覆的人來說,使用FileSystemWatcher,您如何處理您的應用程序未運行的時間?例如,用戶重新啓動了該框,修改了您感興趣的文件,然後啓動您的應用程序?
請務必仔細閱讀關於FileSystemWatcher Class的文檔,特別是關於事件和緩衝區大小的部分。
他們想要.Net解決方案。這可以在自動啓動的服務或自動啓動的系統托盤應用程序中實現等等。這取決於OP進一步研究,但這會讓他們開始。 – cjk 2009-01-26 10:04:05
你可能會碰到與FileSystemWatcher的(沒有得到事件,太多的事件,等等)這個代碼包裝起來的問題,解決了很多人: http://precisionsoftware.blogspot.com/2009/05/filesystemwatcher-done-right.html
你必須要注意修改你想檢查的文件的日期。 經過一段時間後,您可以檢查文件是否稍後修改。 如果文件使用不同的日期和時間進行修改,則可以進行復制。
- 1. 框 - 如何判斷根文件夾是否已被修改?
- 2. 如何判斷PictureBox的圖像是否已更改?
- 3. 如何判斷日期選擇器是否已更改爲Android?
- 4. MySQL:如何判斷單元格值是否已更改?
- 5. 自我跟蹤pocos,如何判斷屬性是否已更改?
- 6. 如何判斷數據庫記錄是否已更改?
- 7. 如何判斷在Erlang中打開的文件是否已更改?
- 8. 是否有可能判斷iFrame的src是否已更改?
- 9. 如何判斷NSUserDefaults是否已保存?
- 10. 如何判斷HttpResponse是否已關閉?
- 11. 如何判斷tcplistener是否已關閉?
- 12. 如何判斷Streamwriter是否已關閉?
- 13. 如何判斷NSManagedObject是否已保存?
- 14. 如何判斷.NET 3.5 SP1是否已安裝?
- 15. 如何判斷net/http的ResponseWriter.Write()是否已被調用?
- 16. 如何通過.NET更改CAB文件?
- 17. 如何知道.NET C#中的文件是否已更改?
- 18. Xamarin格式的NotificationHub:如何判斷通知是否已發送
- 19. 如何判斷IEnumerable是否已經過評估?
- 20. 如何判斷一個過程是否已經結束?
- 21. 如何判斷假期是否已過(每年)?
- 22. 如何判斷文件是否是nv12格式的文件?
- 23. 如何判斷Less文件是否與已編譯的CSS文件同步
- 24. 如何判斷.net控件是否使用windbg可見
- 25. 如何判斷PhpStorm中的文件是否存在未保存的更改?
- 26. 如何判斷用戶控件是否已完成加載vb6
- 27. 如何判斷$(window).load()/ window.onload事件是否已經被觸發?
- 28. 如何使用shell來判斷軟件是否已安裝?
- 29. 使用BindingSource,我該如何判斷是否有待更改?
- 30. 如何判斷Backbone.js中的模型是否未更改?
檢查MSDN文檔,根據您嘗試觀看的文件數量,存在內存泄漏和/或內存不足異常的可能性。從.net開始,做這件事的最好方法就是ck的答案。 – Spence 2009-01-26 08:42:02