Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用FileSystemWatcher创建而不更改_C#_.net_Filesystemwatcher - Fatal编程技术网

C# 如何使用FileSystemWatcher创建而不更改

C# 如何使用FileSystemWatcher创建而不更改,c#,.net,filesystemwatcher,C#,.net,Filesystemwatcher,我对C#的FileSystemWatcher有一些问题 下面是我的代码 private void MyFileSystemWatcher() { _watch = new FileSystemWatcher(path); _watch.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.D

我对C#的FileSystemWatcher有一些问题

下面是我的代码

    private void MyFileSystemWatcher()
    {
        _watch = new FileSystemWatcher(path);
        _watch.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size;
        _watch.Filter = "*.*";
        _watch.IncludeSubdirectories = true;

        _watch.Changed += new FileSystemEventHandler(_watch_Changed);
        _watch.Created += new FileSystemEventHandler(_watch_Created);

        _watch.EnableRaisingEvents = true;
    }

    private void _watch_Changed(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine("File changed: {0}", e.Name);
    }

    private void _watch_Created(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine("File created: {0}", e.Name);
    }
当我把book.txt放到目录中时,它就是我的结果

File created: book.txt
File changed: book.txt
但这不是我预期的结果。我希望它能触发创建的事件

File created: book.txt
如何改进代码。我无法删除已更改的事件,我使用了另一个案例。

事件说明:

当对受监视目录中的文件或目录的大小、系统属性、上次写入时间、上次访问时间或安全权限进行更改时,将引发更改事件

您可以监视文件夹,并通过向其中添加新文件来更改其大小,以便收到事件通知


所以很自然,当您在文件系统上来回移动文件时,可能会得到一系列不同的事件。您只需阅读从事件中获得的属性并采取相应的行动。

我刚才遇到了这个问题,而这个页面是第一个搜索结果之一-我知道这是一个较老的问题,但由于没有结论性的答案,我将冒昧地添加我的解决方案。 我看到的具体行为是,在创建文件时,更改创建事件都是由FileSystemWatcher触发的

e、 g.如果我在命令提示符下键入:

echo test >foobar.txt
…然后我的FSW为foobar.txt的更改,然后为文件的创建而启动。正如上面Tigran所解释的,虽然技术上是正确的,但我真正感兴趣的是向用户展示创建事件

我的解决办法微不足道。我创建了一个布尔标志来指示FSW事件处理程序是否已启动,并在创建事件发生时将其设置为TRUE。我修改了更改事件处理程序,使其仅在标志设置为false时才执行操作。 换句话说,每个周期只处理一个事件(在我的例子中,当用户单击按钮确认事件时,标志被重置),并且优先权被赋予创建事件


我希望这能帮助其他遇到同样挑战的人。

旁注:由于文件操作的实现方式,有时您确实会收到意外的通知序列。。。在正确监听文件更改后,您应该尝试其他操作-保存、以不同方式复制、复制粘贴/拖放,并确保明智地处理所有情况。您是移动文件还是创建副本?在任何情况下,请注意,移动或复制文件可能会更新文件属性,因此会发生“更改”事件
FileSystemWatcher
只是执行您要求它执行的操作。如果您不想对特定的已更改事件做出反应,那么就不要这样做。你到底在这里遇到了什么麻烦?不清楚您在问什么。我需要更改的事件来监视文件内容是否已修改。我需要创建的事件来监视新文件,而不是触发已更改的事件。我不相信这个答案解决了这个问题。他们询问的更改事件实际上是针对文件的,而不是针对目录的。您的答案中的其他问题包括目录实际上没有大小(因此大小的更改不可能触发通知),并且您的答案实际上没有解决OP的问题,不管是什么问题。