2013-02-04 62 views
0

我已經寫了下面的代碼:FileStream.Write不寫什麼

public static class PLog 
{ 
    private static FileStream logFileStream; 
    private static string logFilePath; 

    public static void Initialize() 
    { 
     logFilePath = PSettings.IO.dirLogs + "log_" + DateTime.Now.ToString("ddMMyy_HHmmss") + ".txt"; 

     if (!Directory.Exists(PSettings.IO.dirLogs)) Directory.CreateDirectory(PSettings.IO.dirLogs); 

     logFileStream = new FileStream(logFilePath, FileMode.Create); 
    } 

    public static void WriteLine(string text) 
    { 
     byte[] textArray = Encoding.ASCII.GetBytes("[" + DateTime.Now.ToString("dd.MM.yyyy - HH:mm:ss") + "] " + text + "\n"); 

     logFileStream.Write(textArray, 0, textArray.Length); 
    } 

    public static void Close() 
    { 
     logFileStream.Close(); 
    } 
} 

但是,當我這樣稱呼它,它不會寫入任何文件:

PLog.Initialize(); 
PLog.WriteLine("test"); 
PLog.Close(); 

該文件已創建,但它的大小爲0字節。

+0

你有沒有叫Close();方法呢? –

+1

如果你的問題已經解決,那麼請馬克解決它的anwser。 – Maximc

回答

3

FileStream實現IDisposable

它很少像你在代碼中顯示,因爲它是很難真正確保IDisposable.Dispose()被調用正確清理流使用它在靜態背景下是個好主意。

如果可以,用關鍵字,以確保Dispose()被稱爲

using (FileStream fs = new FileStream(logFilePath, FileMode.Create)) 
{ 
    // Do stuff with fs 
} 

如果你必須保持當前的結構使用FileStream,檢查Close()真的被稱爲(和你不是例如獲得一個阻止它被調用的Exception)。

UPDATE

關於到對方的回答您的評論:

追加Environment.Newline你的字符串的結尾你寫出來了。

或者,您可以使用StreamWriter,它公開WriteLine()方法。

+0

非常感謝,但'FileStream'沒有'WriteLine'成員。 – namespace

+0

Oopps我的壞。我正在考慮一些封裝。編輯。 –

1

您需要使用刷新來保存

logFileStream.Flush(); 

編輯:

關閉也應該沖洗,但如果以後發生是可能的緩衝區被垃圾收集

+0

不關閉()也刷新流? –

+0

@EricJ。 - 是的,它確實! –

+0

他沒有在WriteLine中調用它,他不確定他是否做過。 – Maximc