Вопрос:
Можно ли определить, когда файл, для которого есть открытый FileStream, был переименован.
Случай:
Я пытаюсь отслеживатьжурналы для нашего приложения я читаю из файлов журналов, так как не хочу вмешиваться в саму регистрацию.
Это прекрасно работает, пока файл не будет свернут.Мое приложение продолжает чтение из переименованного файла, даже не замечая этого.
Я пытался , используя FileSystemWatcher для обнаружения броска, но иногда получаю много событий, иногда нет, поэтомуэто не очень хорошее решение (также файлы журналов могут находиться на сетевом ресурсе, который может быть дополнительным сдерживающим фактором при использовании FSW).
Если бы я мог узнать, какой файл (имя) у меня открытЯ могу сравнить это с _fileName
, но я не знаю, как или можно ли это сделать.
Есть ли другие варианты, которые я мог бы изучить?
Код:
это упрощенная версия моего класса мониторинга файлов:
public class MonitorFile
{
private String _fileName = String.Empty;
private bool _stopMonitoring = false;
public MonitorFile(string fileName)
{
_fileName = fileName;
}
// Simplified method
public void StartMonitoring()
{
using (var reader = new StreamReader(
new FileStream(
_monitorFileName,
FileMode.Open,
FileAccess.Read,
FileShare.Delete | FileShare.ReadWrite)))
{
while (!_stopMonitoring)
{
Thread.Sleep(500);
while ((line = reader.ReadLine()) != null)
{
//...Do stuff with the lines
}
}
}
}
}