2009-07-21 43 views
1

代價如何確保日誌目錄存在於應用程序中的每個日誌消息之前,該日誌消息可能會每秒記錄幾次(但不會持續)?C#Directory.Exists

我可以實現一個文件系統觀察樣式的線程火起來,並重新創建一個丟失的日誌目錄,但我的直覺是,這將是一個稍重的操作

+1

如果您使用FileStream對象創建日誌文件,那麼名爲OpenOrCreate的FileMode參數有一個選項,該參數在不存在的情況下創建完整的文件路徑。 FileSystemWatcher根本不重,它的目的就是儘可能精簡操作。如果我沒有記錯的話,在NTFS分區中幾乎沒有成本,因爲NTFS本身支持文件和目錄級別的事件綁定。 這就是說,我不知道這是必要的這種情況。 – MyItchyChin 2009-07-21 00:25:06

回答

4

我會檢查,看它是否存在於第一次,比如你的記錄器的構建,如果不是那麼創建它的話。

Windows無法輕鬆刪除正在使用的目錄。

+0

由於我的StreamWriter是在使用中處理的,因此該目錄不一定會被使用,因此將在每個日誌 – johnc 2009-07-21 00:18:17

+3

之後進行處理,除此之外,如果您在目錄中維護文件鎖定,則無法刪除它,直到持有該鎖定的進程終止。 – MyItchyChin 2009-07-21 00:19:43

+0

+1我同意,只檢查一次,然後鎖定日誌文件,以便不能刪除目錄。 – 2009-07-21 00:24:48

1

可能不那麼貴。如果你只是在失敗的寫入中處理異常,那麼你只會在第一次通過時(或者在刪除目錄後)得到異常,然後其他所有內容都會直接通過。這可能比不斷檢查更好。

+0

一點都不壞 – johnc 2009-07-21 00:18:50

+0

這種類型讓我覺得Java應該有如下語法:try {stuff} catch(Exception e){catch code} andRetryOnce。否則,這種類型的代碼最終會出現一些奇怪的異常代碼和一個無法輕鬆隔離到庫中的循環。 – 2009-07-21 00:21:02

+0

基本上都是這麼想的 – johnc 2009-07-21 00:38:31