3

を使っStreamWriterてメモ帳に書き込んでいます。そして、ステートメントとインスタンスをStreamWriter単独で使用していないかどうかを発見します。メソッドを実行できません。誰も理由を知っていますか?

    static void Main(string[] args)
    {
        //StreamWriter c = new StreamWriter(@"C:\Users\rxxx\Desktop\important.txt", true);
        using (StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true))
        {
            c.WriteLine("hello");
        }

これは実行できます。しかし、代わりに注目された部分を実行すると。メモ帳には何も表示されません。

誰も理由を知っていますか?

4

4 に答える 4

6

オブジェクトを使用する場合は Dispose メソッドを呼び出し、StreamWriter の場合はオブジェクトに対しても Fush を呼び出すため、データがファイルに書き込まれます。次のようにコードを書くことができます:

var c = new StreamWriter(@"C:\Test\important.txt", true);
c.AutoFlush = true;
c.WriteLine("hello");
c.Dispose();
于 2013-05-13T03:56:55.460 に答える
1

using ステートメントを使用しない場合、プログラムはデータをバッファーからファイルにフラッシュしません。そのため、メモ帳で開いたときにファイルに「hello」が書き込まれません。データをファイルに書き込むために、バッファを明示的にフラッシュできます。

 StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true)
 c.WriteLine("hello");
 c.Flush();

ただし、ストリームを破棄する必要があります。しかし、Dispose() メソッドを使用すると、(Flush() メソッドを呼び出すことによって) 自動的にバッファーがフラッシュされるため、Flush() を使用する必要はありません!

using ステートメントを使用すると、バッファをフラッシュするだけでなく、ストリームを適切に解放するため、Dispose() を明示的に記述する必要はありません。それが最善の方法です。

于 2014-05-22T18:24:53.897 に答える
0

using ステートメントは「ENSURE」で、スコープ内のオブジェクトは破棄されます [MSDN]: http://msdn.microsoft.com/en-us/library/yh598w02.aspx

using (StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true))
{
  c.WriteLine("hello");
}

using ステートメントを使用しない場合でも、try ステートメントを使用することをお勧めします

try
{
  StreamWriter c = new StreamWriter(@"C:\Users\xxx\Desktop\important.txt", true);
}
finally
{
  c.Close();
}
于 2013-05-13T03:58:07.873 に答える