2012-11-15 33 views
1

我正在用戶提交信息時將數據寫入日誌文件。辦公室內的其他用戶可能需要查看此日誌文件,但如果辦公室用戶打開了文件,我將無法繼續寫入日誌文件,因爲會提交更多信息。即使其他用戶打開文件的實例,是否有辦法繼續寫入文件?FileStream/StreamWriter如果另一個用戶打開文件

using(StreamWriter writer = new StreamWriter(@"\\filelocation\filename.csv")) 
{ 
    writer.WriteLine("Testing, testing"); 

    writer.Close(); 
} 
+2

不要關閉它。 –

+0

是的......拿走Writer.Close() – Derek

+0

我知道這是多餘的,但我總是教會把Close作爲一個附加的故障保險。也許它不被推薦,但它也與我的問題無關。 – jmease

回答

0

如果需要繼續創建日誌文件,可以建議使用Trace嗎?你可以像這樣附加一個「偵聽器」到Trace中。

Trace.Listeners.Add(new TextWriterTraceListener("myfilename.txt")); 

當然,如果你傳遞一個文件名,它不會自動刷新,並沒有什麼會在文件中,直到它關閉或緩衝區已滿。所以你可以在程序開始時創建流。

而不是打開和關閉文件的每個
FileInfo fi = new FileInfo("myLogFile.txt"); 
StreamWriter _sw; 

void Main() 
{ 
    _sw = fi.CreateText(); 
    _sw.AutoFlush = true; 
    Trace.Listeners.Add(new TextWriterTraceListener(sw)); 
} 

void Close() 
{ 
    if(_sw != null) 
    { 
     _sw.Flush(); 
     _sw.Dispose(); 
    } 
} 
在你的程序

然後,寫一個「日誌」,你可以,而不是僅僅做到這一點。

Trace.WriteLine("My message here"); 

跟蹤有一個名爲類別太一件很酷的事情,這是偉大的日誌...

Trace.WriteLine("My message here", "INFO"); 

//Output: 
//INFO: My message here 

一件事,我發現的是,在某些系統上,你不能打開文本文件,但你可以打開它的副本,並且原始文件將繼續填充。

+0

這個答案有點過頭了,但它似乎是迄今爲止提供的最完整的解決方案。我最終創建了一個單獨的csv文件,該文件用特定的提交進行了時間戳,以便Streamwriter從不嘗試兩次寫入同一個文件。 – jmease

相關問題