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