簡體   English   中英

StreamWriter.Write不寫入文件; 沒有異常拋出

[英]StreamWriter.Write doesn't write to file; no exception thrown

我在C#中的代碼(asp.net MVC)

StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt");

// write a line of text to the file
tw.Write("test");

文件已創建但為空。 沒有異常被拋出。 我以前從未見過這個,我被困在這里; 我只需要編寫一些調試輸出。

請指教。

StreamWriter默認是緩沖的,這意味着在收到Flush()或Close()調用之前它不會輸出。

如果需要,可以通過設置AutoFlush屬性來更改它。 否則,只需:

StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt");

// write a line of text to the file
tw.Write("test");
tw.Close();  //or tw.Flush();

使用

System.IO.File.WriteAllText(@"path\te.txt", "text");

既不沖洗也不關閉也不處置。 試試這個

using (StreamWriter tw = new StreamWriter(@"C:\mycode\myapp\logs\log.txt"))
{
    // write a line of text to the file
    tw.Write("test");
    tw.Flush();
}

或者我的偏好

using (FileStream fs = new FileStream( @"C:\mycode\myapp\logs\log.txt"
                                     , FileMode.OpenOrCreate
                                     , FileAccess.ReadWrite)           )
{
    StreamWriter tw = new StreamWriter(fs);
    tw.Write("test");
    tw.Flush();
}

完成寫入后,您需要關閉或刷新StreamWriter。

tw.Close();

要么

tw.Flush();

但最好的做法是將輸出代碼包裝在using語句中,因為StreamWriter實現了IDisposable:

using (StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt")){
// write a line of text to the file
tw.Write("test");
}
FileStream fs = new FileStream("d:\\demo.txt", FileMode.CreateNew,
                               FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.ASCII);
int data;

sw.Write("HelloWorld");

sw.Close();
fs.Close();
  • 問題是當StreamWriter對象是在FileStream對象的引用下創建的,SW對象總是期待一些數據直到SW對象被關閉。
  • 所以在使用sw.Close()之后; 您的已打開文件將關閉並准備好顯示輸出。

雅虎在VB.net中這不是必需的但是在CSharp看來你需要一個Writer.Flush調用來強制寫入。 當然Writer.Close()也會強制刷新。

我們還可以設置StreamWriter實例的AutoFlush屬性:

sw.AutoFlush = true;
// Gets or sets a value indicating whether the StreamWriter 
// will flush its buffer to the underlying stream after every  
// call to StreamWriter.Write.

來自: http//msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush(v=vs.110).aspx

替代

FileStream mystream = new FileStream("C:\\mycode\\myapp\\logs\\log.txt",    
FileMode.OpenOrCreate, FileAccess.Write);           
StreamWriter tw = new StreamWriter(mystream); 
tw.WriteLine("test");
tw.close();

嘗試關閉文件或將\\n添加到行等

tw.WriteLine("test");
tw.Close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM