如果我正在閱讀共享訪問模式下的文本文件,而另一個進程會截斷它,檢測該文件最簡單的方法是什麼? (我排除了定期刷新FileInfo對象以檢查其大小的明顯選擇)是否有一些方便的方法來捕獲事件? (Filewatcher?)如何檢測C#中的截斷文件
0
A
回答
3
有,它叫FileSystemWatcher。
如果您正在開發Windows窗體應用程序,您可以從工具箱中拖放它。
下面是一些使用示例:
private void myForm_Load(object sender, EventArgs e)
{
var fileWatcher = new System.IO.FileSystemWatcher();
// Monitor changes to PNG files in C:\temp and subdirectories
fileWatcher.Path = @"C:\temp";
fileWatcher.IncludeSubdirectories = true;
fileWatcher.Filter = @"*.png";
// Attach event handlers to handle each file system events
fileWatcher.Changed += fileChanged;
fileWatcher.Created += fileCreated;
fileWatcher.Renamed += fileRenamed;
// Start monitoring!
fileWatcher.EnableRaisingEvents = true;
}
void fileRenamed(object sender, System.IO.FileSystemEventArgs e)
{
// a file has been renamed!
}
void fileCreated(object sender, System.IO.FileSystemEventArgs e)
{
// a file has been created!
}
void fileChanged(object sender, System.IO.FileSystemEventArgs e)
{
// a file is modified!
}
它在System.IO和System.dll中,所以你應該能夠在大多數類型的項目中使用它。
0
只是要咀嚼;它可能不適用於你的情況:
chakrit的解決方案是正確的,你問什麼,但我不得不問 - 爲什麼你正在閱讀一個文件,而另一個進程截斷它?
特別是,如果您沒有同步,則同時讀取/寫入文件不是特別安全,並且您可能會發現您還有其他神祕問題。
3
FSW不能可靠工作,它是異步的。假設你沒有得到一個異常,當文件被截斷時,StreamReader.ReadLine()將返回null。然後檢查尺寸是否改變。注意不可避免的競爭條件,你需要驗證關於時間的假設。
相關問題
- 1. 如何在Visual C++中截斷文件?
- 2. c#日誌文件截斷
- 3. C#截斷CSV文件#
- 4. 檢測整數截斷
- 5. 如何檢測C++中的空文件?
- 6. 如何截斷文本中的文本
- 7. 檢查ELF文件是否被截斷
- 8. Erlang文件截斷
- 9. C++ XOR加密截斷文件
- 10. 如何使open()截斷現有文件
- 11. 如何通過sudo截斷glob文件?
- 12. 如何截斷在CSV文件蟒蛇
- 13. 如何在C#中截斷列表?
- 14. 如何截斷HTML中的文本
- 15. 如何截斷html中的文本
- 16. 如何截斷Angular2中的文本?
- 17. 如何檢測C中的迴文?
- 18. 如何檢查UILabel是否被截斷?
- 19. 如何檢測斷開事件
- 20. 截斷RTF文件中的關鍵字
- 21. 如何檢測objective-c中的文本文件編碼?
- 22. ResXResourceWriter截斷文件結尾
- 23. 截斷DBX核心文件?
- 24. XmlDocument.WriteTo截斷結果文件
- 25. 停止截斷Java文件?
- 26. Subwcrev.exe截斷版本文件
- 27. Joomla Mootools文件被截斷
- 28. Javascript文件被截斷
- 29. 如何檢測USB斷開事件? (Windows,.NET C#應用程序)
- 30. 如何檢測C中的套接字斷開連接#
不知道。 +1 – 2008-11-10 19:12:23
正如我的文章所暗示的,我想到了這一點,但我很好奇是否還有其他解決方案。無論如何,我正在投票回答你的問題,因爲你給了這麼好的示例代碼! ;-) – dviljoen 2008-11-10 19:23:29
那麼..你是在尋求一種「方便」的方式...我認爲沒有什麼更方便的...除了可能重新設計你的方法來解決這個問題,就像下面的@petercrabtree所說的那樣。感謝+1,我正在接近獲得另一個能力:-) – chakrit 2008-11-10 19:29:28