4

LOCに厳しい教授の課題に取り組んでいます。このため、次のことを行いたいと思います。

(new StreamWriter(saveFileDialog.FileName)).Write(textBox.Text);

それ以外の

StreamWriter sw = new StreamWriter(saveFileDialog.FileName);
sw.Write(textBox.Text);
sw.Close();

最初の例では、ストリームを閉じません。これでよろしいですか?セキュリティやメモリの問題が発生しますか?

4

9 に答える 9

15

出力が得られないか、不完全な出力が得られる場合があります。ライターを閉じると、ライターもフラッシュされます。手動で呼び出すCloseのではなく、ステートメントを使用しusingます...ただし、テキストをファイルに書き込もうとしているだけの場合は、ワンショットFile.WriteAllText呼び出しを使用します。

File.WriteAllText(saveFileDialog.FileName, textBox.Text);
于 2012-10-08T14:39:32.840 に答える
8

多分あなたの家庭教師は次のことを探しています:

File.WriteAllText(saveFileDialog.FileName, textbox.Text);

簡潔なコードを好むのは合理的ですが、読みやすさや正確さを犠牲にすることはありません。

于 2012-10-08T14:40:26.830 に答える
5

fout.Close() を使用しない最も簡単なソリューションは次のとおりです。

        using (StreamWriter fout = new StreamWriter(saveFileDialog.FileName))
        {
            fout.Write(textBox.Text);
        }
于 2012-10-08T14:40:12.040 に答える
3

閉じないと、最後に書き込まれたデータが書き出されることを保証できません。これは、バッファを使用し、ストリームを閉じるとバッファがフラッシュされるためです。

次に、ファイルを開いている状態でロックし、別のプロセスがそのファイルを使用できないようにします。

ファイルストリームを使用する最も安全な方法は、using ステートメントを使用することです。

于 2012-10-08T14:40:51.760 に答える
1

検討

using( var fout = new StreamWriter(saveFileDialog.FileName){ fout.write(textBox.Text); }
于 2012-10-08T14:42:02.010 に答える
1

簡単に言えば、その操作に割り当てられたリソースは解放されず、そのファイルが潜在的にロックされる可能性があることは言うまでもありません。

于 2012-10-08T14:39:56.583 に答える
0

を試すことができusing blokますclean your no managed object

        using (var streamWriter = new StreamWriter(saveFileDialog.FileName))
        {
            streamWriter.Write(textBox.Text);
        }
于 2012-10-08T14:41:28.413 に答える
0

それはメモリハザードになります。

「using」ステートメントでは常に StreamWriter を使用します

using(StreamWriter fout = new StreamWriter(saveFileDialog.FileName)
{
    fout.Write(textBox.Text);
}
于 2012-10-08T14:41:59.817 に答える
0

どのようにGCがそれを閉じます。しかし問題は、GC がそのストリームを閉じるまで、リソースを保留にする必要がないことです。

于 2012-10-08T14:40:24.850 に答える