2010-05-21 474 views
0

我有一個FileSystemWatcher對象設置來監視由控制檯應用程序編寫的日誌文件的更改。 通知程序過濾器設置爲: watcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.LastAccess;環境:操作系統:Win 2k8服務器。fflush標準輸出

轉儲到被重定向到文件out.log標準輸出的控制檯應用程序代碼:

空隙MYSET ::轉儲() { 的std :: COUT < <此< < ENDL; fflush(stdout); }

運行轉儲後(在調試器的直接窗口中),文件大小保持不變。 如果我運行「類型」命令更新似乎發生。 任何想法

C:\ TEMP>目錄 5/21/2010 11:11 4,159 out.log

轉儲後:(無變化)

C:\ TEMP>目錄 05 /二千○十分之二十一11:11 4,159 out.log

運行 「類型」 命令

C:\ TEMP>鍵入out.log 文件現在有新的大小... ç :\ temp>目錄 05/21/2010 11:11 AM 4,410 out.log

這是爲什麼?我在這裏錯過了什麼嗎?提前致謝。

回答

0

http://msdn.microsoft.com/en-us/library/ms724290(VS.85).aspx

時間戳在不同的時間和因各種原因被更新。關於文件時間戳的唯一保證是當更改的句柄關閉時文件時間正確地反映出來。

所以,如果你只是沖洗,而不是關閉,那麼任何看最後寫入文件時間變化的東西都不能保證被觸發。

+0

感謝您的回覆。我試過fclose,但是這會關閉文件以便後續寫入 - 即,fclose不是一個選項。通知過濾器應該使用哪些其他標準(大小除外)? – user85917 2010-05-21 16:51:45

+0

那麼,除了大小是什麼改變?它可能是唯一的選擇,雖然它不一定要更新,直到收盤。您可以通過打開和關閉閱讀句柄(這是哪種類型)來強制更新,但不能保證。 – 2010-05-21 17:07:22