如果我正在阅读共享访问模式下的文本文件,而另一个进程会截断它,检测该文件最简单的方法是什么? (我排除了定期刷新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