[英]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.