我有一个程序(反复地)读取文件的内容,如果有新数据到达,则进行一些处理。阅读非常简单,类似于
class Reader
{
FileStream fs_ = null;
StreamReader sr_ = null;
Reader(string filename)
{
fs_= new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete);
sr_ = new StreamReader(fs_);
}
void Read()
{
string line;
while (line = sr_.ReadLine())
{
// ...
}
}
}
方法Read()每300 ms轮询一次。有一些代码可以在外部参与者重命名/删除的情况下关闭并重新打开文件。
一般来说,它运作正常,但有时候(我上个月遇到过这两次)会出现奇怪的事情。报告正确长度的共享上的文件,但在尝试从中读取时,显示一个半字符串和其余文件,其中包含零(0x00,而不是'0')内容。此外,当我尝试通过托管我程序的同一台机器上的任何外部文本/二进制编辑器读取文件时,我得到了相同的图片。从网络上的其他机器上读取文件没有任何问题,并显示完整的内容。在我使用我的程序重新启动计算机之前,问题仍然存在。
知道发生了什么,我该如何解决?