如果StreamReader或StreamWriter未关闭会发生什么?

时间:2012-10-08 14:37:21

标签: c# streamwriter

我正在为一位严格遵守LOC的教授工作。出于这个原因,我想做以下事情:

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

而不是

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

在第一个例子中,我不关闭流。这个可以吗?它会导致任何安全或内存问题吗?

9 个答案:

答案 0 :(得分:15)

您可能无法获得任何输出或输出不完整。关闭作者也会刷新它。我没有手动调用Close,而是使用using语句...但如果您只是尝试将文字写入文件,请使用一个-shot File.WriteAllText致电:

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

答案 1 :(得分:8)

也许你的导师正在寻找:

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

更喜欢简洁的代码是合理的,但不能以牺牲可读性或正确性为代价。

答案 2 :(得分:5)

没有fout.Close()的最简单的解决方案应该是:

        using (StreamWriter fout = new StreamWriter(saveFileDialog.FileName))
        {
            fout.Write(textBox.Text);
        }

答案 3 :(得分:3)

如果你不关闭它,你不能保证它会写出写入它的最后一段数据。这是因为它使用缓冲区并在关闭流时刷新缓冲区。

其次,它会将文件锁定为打开状态,阻止其他进程使用它。

使用文件流的最安全方法是使用using语句。

答案 4 :(得分:1)

简短回答,为该操作分配的资源将不会被释放,更不用说它可能会无限制地锁定该文件。

答案 5 :(得分:1)

考虑

using( var fout = new StreamWriter(saveFileDialog.FileName){ fout.write(textBox.Text); }

答案 6 :(得分:0)

任何GC将如何为您关闭它。但问题是,直到GC关闭该流,您才不必将资源暂停

答案 7 :(得分:0)

您可以尝试使用using blokclean your no managed object

        using (var streamWriter = new StreamWriter(saveFileDialog.FileName))
        {
            streamWriter.Write(textBox.Text);
        }

答案 8 :(得分:0)

这将是一种记忆危害。

我总是在'using'语句中使用StreamWriter

using(StreamWriter fout = new StreamWriter(saveFileDialog.FileName)
{
    fout.Write(textBox.Text);
}