Я использую FileSystemWatcher
класс в C#
для отслеживания изменений в файле всякий раз, когда пользователь сохраняет файл после его изменения.
FileSystemWatcher watcher = new FileSystemWatcher()
{
Path = DIR_NAME,
NotifyFilter = NotifyFilters.LastWrite |
NotifyFilters.CreationTime |
NotifyFilters.LastAccess,
Filter = "*.pdf",
IncludeSubdirectories = true,
EnableRaisingEvents = true
};
watcher.Changed += OnChanged;
Однако файл, который я хочу отслеживать, создается программно, как показано ниже:
FileStream stream = FileUtil.CreateNewFile(filePath); // Creates a file
file.WriteFileToStream(stream); // Writes into the file
В идеале мой код должен работать следующим образом:
- Программа создаст файл и запишет в него некоторый контент.
- Пользователь открывает файл, изменяет его и сохраняет.
- В этот момент он должен вызвать
OnChanged
, т.е. я хочу, чтобы мой код обработчика OnChanged
выполнялся только тогда, когда реальный пользователь изменяет его и сохраняет его.
Однако он запускается всякий раз, когда файл записывается программным способом, т. Е. В следующей строке:
file.WriteFileToStream(stream);
Технически правильное поведение, так как он отслеживаетизменить в файле.Однако мой бизнес-пример не позволяет выполнять код обработчика OnChanged
при первоначальном создании и записи файла.
У меня такой вопрос, есть ли способ пропустить вызов OnChanged
, когда файл создается и записывается в первый раз программно?
Примечание:
- Архитектура приложения требует, чтобы
FileSystemWatcher
инициализировался при запуске моего приложения.Поэтому я не могу зарегистрировать его после создания файла. - Это многопользовательское приложение, в которое одновременно будут записывать файлы несколько пользователей, поэтому я не могу отключить наблюдатель перед созданием файла и включить его после его создания:
watcher.EnableRaisingEvents = false;
CreateFile();
watcher.EnableRaisingEvents = true;