简体   繁体   English

FileSystemWatcher不会使用'mv'命令检测到移入目录的文件或在ubuntu上剪切并粘贴

[英]FileSystemWatcher doesnt detect files moved into directory using 'mv' command or cut and paste on ubuntu

I am using a FileSystemWatcher to detect files that are dropped into a directory and then they get forwarded elsewhere and removed from directory. 我正在使用FileSystemWatcher来检测拖放到目录中的文件,然后将它们转发到其他位置并从目录中删除。 During devellopment I just copied files into the dir for testing, however I am just realizing that no events get fired in qa because the files are moved, not copied into the dir. 在开发期间,我只是将文件复制到目录中进行测试,但是我只是意识到没有事件在qa中触发,因为文件是移动的,而不是复制到目录中。 Is there any way I can capture files moved into a directory using c# dotnet core on ubuntu? 有什么办法可以使用ubuntu上的c#dotnet core捕获移入目录的文件?

Below is an excerpt of my code showing how I set up the watcher, in my actual app I was only watching the changed event, but added more event listeners to try and figure out how to do this 以下是我的代码摘录,显示了我如何设置观察者,在我的实际应用中,我仅观察改变的事件,但是添加了更多的事件监听器以尝试确定如何做

    CaptureServerSettings appSettings = provider.GetRequiredService<CaptureServerSettings>();

    using (FileSystemWatcher directoryWatcher = new FileSystemWatcher(appSettings.WatchDirectory, "*.*"))
    {
        directoryWatcher.BeginInit();
        directoryWatcher.IncludeSubdirectories = false;
        directoryWatcher.NotifyFilter = NotifyFilters.LastWrite;
        directoryWatcher.Error += errorEvent;
        directoryWatcher.Renamed += renameEvent;
        directoryWatcher.Created += createdEvent;
        directoryWatcher.Changed += changedEvent;
        directoryWatcher.EnableRaisingEvents = true;
        directoryWatcher.EndInit();
        provider.GetRequiredService<CancellationTokenSource>().Token.WaitHandle.WaitOne();
        }

    private static void changedEvent(object sender, FileSystemEventArgs e) => _logger.LogWarning("Changed: {@eventargs}", e);

    private static void errorEvent(object sender, ErrorEventArgs e) => _logger.LogWarning("Error: {@eventargs}", e);

    private static void createdEvent(object sender, FileSystemEventArgs e) => _logger.LogWarning("Created: {@eventargs}", e);

    private static void renameEvent(object sender, RenamedEventArgs e) => _logger.LogWarning("Renamed: {@eventargs}", e);

Should have figured this out without posting to stack... My issue was two things. 应该解决这个问题而不将其发布到堆栈中。我的问题是两件事。 I need to change the NotifyFilter to include FileName changes and to subscribe to the changed event as shown below. 我需要更改NotifyFilter以包括FileName更改并订阅更改的事件,如下所示。

       CaptureServerSettings appSettings = provider.GetRequiredService<CaptureServerSettings>();
       using (FileSystemWatcher directoryWatcher = new FileSystemWatcher(appSettings.WatchDirectory, "*.*"))
       {
            directoryWatcher.BeginInit();
            directoryWatcher.IncludeSubdirectories = false;
            directoryWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
            directoryWatcher.Created += createdEvent;
            directoryWatcher.Changed += changedEvent;
            directoryWatcher.EnableRaisingEvents = true;
            directoryWatcher.EndInit();
            provider.GetRequiredService<CancellationTokenSource>().Token.WaitHandle.WaitOne();
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM