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

您可能没有得到任何输出,或者输出不完整。关闭 writer 也会刷新它。而不是手动调用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

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

于 2012-10-08T14:39:56.583 回答
1

考虑

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

GC 将如何为您关闭它。但问题是在 GC 关闭该流之前,您没有必要暂停资源

于 2012-10-08T14:40:24.850 回答
0

您可以尝试using blokclean your no managed object

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

这将是一个记忆危险。

我总是在“使用”语句中使用 StreamWriter

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