web-dev-qa-db-ja.com

StreamWriter.Writeはファイルに書き込みません。例外はスローされません

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");

ファイルは作成されますが、空です。例外はスローされません。私はこれを見たことがなく、ここで立ち往生しています。デバッグ出力を書くだけです。

お知らせ下さい。

18
sarsnake

使用する

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

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();
50
Benjamin Cox

フラッシュも閉鎖も廃棄もされません。これを試して

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();
}
6
Tony Hopkinson

書き込みが終了したら、StreamWriterを閉じるかフラッシュする必要があります。

tw.Close();

または

tw.Flush();

ただし、StreamWriterはIDisposableを実装するため、ベストプラクティスはusingステートメントで出力コードをラップすることです。

using (StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt")){
// write a line of text to the file
tw.Write("test");
}
5
pedram bashiri
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 ObjectがFileStream Objectを参照して作成される場合、SWオブジェクトが閉じられるまで、SWオブジェクトは常に何らかのデータを予期することです。
  • sw.Close();を使用すると、開いたファイルが閉じられ、出力を表示する準備が整います。
3
Phani Tekkem

VB.netのYaはこれは必要ありませんでしたが、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.

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

1
shivesh suman

代替案

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

ファイルを閉じるか、次のような行に\nを追加してください。

tw.WriteLine("test");
tw.Close();
0
Hai Bi