Как написать FileSystemWatcher без запуска бесконечного цикла - PullRequest
0 голосов
/ 31 мая 2018

Как записать файл в C # в путь к папке, который отслеживается FileSystemWatcher?

Мои настройки fileSystemWatcher следующие:

public FileSystemWatcher CreateAndExecute(string path)
{
    Console.WriteLine("Watching " + path);

    //Create new watcher
    FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();

    fileSystemWatcher.Path = path;
    fileSystemWatcher.IncludeSubdirectories = false;
    fileSystemWatcher.NotifyFilter = NotifyFilters.LastWrite | 
    NotifyFilters.FileName | NotifyFilters.DirectoryName;

    fileSystemWatcher.Filter = "*.txt";
    fileSystemWatcher.Changed += new FileSystemEventHandler(OnChange);

    fileSystemWatcher.InternalBufferSize = 32768;

    //Execute
    fileSystemWatcher.EnableRaisingEvents = true;
}

private void OnChange(object source, FileSystemEventArgs e)
{
    //Replace modified file with original copy
}

Iхотите заменить содержимое измененного файла резервной копией из базы данных всякий раз, когда в файл происходит несанкционированная запись (вне программы).

Однако, когда я пишу с использованием File.WriteAllText () в измененный файлfile, он вызывает событие Change с помощью FileSystemWatcher, когда действие снова регистрируется как запись.

Это заставляет программу работать в бесконечном цикле перезаписи только что записанного файла.

Как я могу заменить измененный файл резервной копией, не вызывая другое событие для записи с помощью FileSystemWatcher?

1 Ответ

0 голосов
/ 31 мая 2018

Помимо того, что вы, вероятно, можете решить проблему лучше / другим способом, используя безопасность файлов ОС, например, у вас есть несколько вариантов:

  • Временно отключить наблюдателя, в этом случаеВы можете потерять события в случае атаки методом грубой силы, что может оказаться не тем, что вам нужно.
  • Сохраните список с файлами, которые вы переписали, игнорируйте одно изменение для файлов в списке и удалите его из списка.впоследствии -> также может быть использовано злоупотребление, если вредоносная программа знает это
  • Сохраните SHA1 или SHA256 (или другой хэш) содержимого файла и заменяйте файл только в том случае, если хеш отличается -> вероятно, лучший подход дляэта проблема
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...