簡體   English   中英

FileSystemWatcher不會使用'mv'命令檢測到移入目錄的文件或在ubuntu上剪切並粘貼

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

我正在使用FileSystemWatcher來檢測拖放到目錄中的文件,然后將它們轉發到其他位置並從目錄中刪除。 在開發期間,我只是將文件復制到目錄中進行測試,但是我只是意識到沒有事件在qa中觸發,因為文件是移動的,而不是復制到目錄中。 有什么辦法可以使用ubuntu上的c#dotnet core捕獲移入目錄的文件?

以下是我的代碼摘錄,顯示了我如何設置觀察者,在我的實際應用中,我僅觀察改變的事件,但是添加了更多的事件監聽器以嘗試確定如何做

    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);

應該解決這個問題而不將其發布到堆棧中。我的問題是兩件事。 我需要更改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