У меня есть программа, которая (многократно) читает содержимое файла и, если поступают новые данные, выполняет некоторую обработку.Чтение довольно просто, что-то вроде
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 мс.Есть некоторый фрагмент кода, который закрывает и снова открывает файл в случае его переименования / удаления внешними субъектами.
Обычно это работает нормально, но иногда (я сталкивался с этим два раза в течение последнего месяца) странная вещьпоявляется.Файл на общем ресурсе сообщает правильную длину, но при попытке прочитать из него показывает половину строки и остаток файла с нулевым (0x00, а не '0') содержимым.Более того, я получил ту же картинку при попытке прочитать файл через любой внешний текстовый / бинарный редактор с того же компьютера, на котором размещалась моя программа.С других машин в сети файл читается без проблем и показывает полное содержимое.Проблема сохраняется, пока я не перезагружаю машину с моей программой.
Есть идеи, что происходит и как я могу это исправить?