簡體   English   中英

Usinf System.IO.FileSystemWatcher創建文件時寫入日志文件

[英]Usinf System.IO.FileSystemWatcher to write to a log file when a file is created

我正在嘗試監視目錄中文件的創建。 如果創建了文件,我想將一行寫到日志文件並繼續監視文件夾。 我在下面使用此代碼,但在日志文件中卻出現了兩次輸入。

如果我在$action加入了中斷,我可以看到它在等待下一個事件之前運行了兩次,這就是為什么它在日志文件中寫入兩行的原因。

我怎么了?

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\test-folder"
$watcher.Filter = "*FINAL*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true 
$watcher.InternalBufferSize = 16384 

### DEFINE ACTIONS AFTER A EVENT IS DETECTED
$action = { $path = $Event.SourceEventArgs.FullPath
            $changeType = $Event.SourceEventArgs.ChangeType
            $logline = "$(Get-Date), $changeType, $path"
            Add-Content "C:\test-folder\created.log" -value $logline
          }    
### DECIDE WHICH EVENTS SHOULD BE WATCHED + SET CHECK FREQUENCY  
$created = Register-ObjectEvent $watcher "Created" -Action $action
#    $changed = Register-ObjectEvent $watcher "Changed" -Action $action
#    $deleted = Register-ObjectEvent $watcher "Deleted" -Action $action
#    $renamed = Register-ObjectEvent $watcher "Renamed" -Action $action
while ($true) {sleep 5}

日志文件看起來像這樣...

05/03/2016 11:25:16, Created, C:\test-folder\test1-FINAL-.txt
05/03/2016 11:25:16, Created, C:\test-folder\test1-FINAL-.txt
05/03/2016 11:26:10, Created, C:\test-folder\test2-FINAL-.txt
05/03/2016 11:26:10, Created, C:\test-folder\test2-FINAL-.txt

您應該閱讀以下主題: LastWrite FileSystemWatcher Powershell:通知

您可能會注意到,在某些情況下,單個創建事件會生成多個由組件處理的Created事件。 例如,如果使用FileSystemWatcher組件監視目錄中新文件的創建,然后使用記事本創建文件對其進行測試,則即使只創建了一個文件,也可能會生成兩個Created事件。 這是因為記事本在寫入過程中執行了多個文件系統操作。 記事本將批量寫入磁盤,以創建文件內容,然后創建文件屬性。 其他應用程序可以相同的方式執行。 因為FileSystemWatcher監視操作系統活動,所以將拾取這些應用程序觸發的所有事件。

我最終使用時間戳來設置一個與之比較的全局變量,以檢查其是否重復。

並不是最好的解決方案,因為任何可能產生第二差異的事物仍然會導致重復輸入,但這在我們的情況下仍然有效。

感謝大家的投入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM