gpt4 book ai didi

c# - 如何在不触发无限循环的情况下编写 FileSystemWatcher

转载 作者:行者123 更新时间:2023-11-30 19:53:08 24 4
gpt4 key购买 nike

如何用 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
}

每当文件发生未经授权的写入(程序外)时,我想用数据库中的备份副本替换修改后的文件内容。

但是,当我使用 File.WriteAllText() 写入修改后的文件时,它会触发 FileSystemWatcher 的 Change 事件,因为该操作被再次注册为写入。

这会导致程序在覆盖它刚刚写入的文件的无限循环中运行。

如何在不触发 FileSystemWatcher 写入的另一个事件的情况下,用备份副本替换修改后的文件?

最佳答案

除了您可以通过使用操作系统文件安全功能以更好/不同的方式解决问题之外,您还有一些选择:

  • 暂时禁用观察器,在这种情况下,您可以在遭受暴力攻击时丢失事件,这可能不是您想要的。
  • 保留一份包含您重写的文件的列表,忽略列表中文件的一项更改,然后将其从列表中删除 -> 如果恶意程序知道这一点,也可能被滥用
  • 存储文件内容的 SHA1 或 SHA256(或其他哈希值),并且仅在哈希值不同时才替换文件 -> 可能是解决此问题的最佳方法

关于c# - 如何在不触发无限循环的情况下编写 FileSystemWatcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50618634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com