我正在为一位对LOC严格的教授做作业。出于这个原因,我想做以下事情:
(new StreamWriter(saveFileDialog.FileName)).Write(textBox.Text);
代替
StreamWriter sw = new StreamWriter(saveFileDialog.FileName);
sw.Write(textBox.Text);
sw.Close();
在第一个示例中,我没有关闭流。这个可以吗?它会导致任何安全或内存问题吗?
我正在为一位对LOC严格的教授做作业。出于这个原因,我想做以下事情:
(new StreamWriter(saveFileDialog.FileName)).Write(textBox.Text);
代替
StreamWriter sw = new StreamWriter(saveFileDialog.FileName);
sw.Write(textBox.Text);
sw.Close();
在第一个示例中,我没有关闭流。这个可以吗?它会导致任何安全或内存问题吗?
您可能没有得到任何输出,或者输出不完整。关闭 writer 也会刷新它。而不是手动调用Close
,我会使用一个using
语句......但如果你只是想将文本写入文件,请使用一次性File.WriteAllText
调用:
File.WriteAllText(saveFileDialog.FileName, textBox.Text);
也许您的导师正在寻找:
File.WriteAllText(saveFileDialog.FileName, textbox.Text);
喜欢简洁的代码是合理的,但不以牺牲可读性或正确性为代价。
没有 fout.Close() 的最简单的解决方案应该是:
using (StreamWriter fout = new StreamWriter(saveFileDialog.FileName))
{
fout.Write(textBox.Text);
}
如果你不关闭它,你不能保证它会写出最后一条写入它的数据。这是因为它使用缓冲区,并且在关闭流时会刷新缓冲区。
其次,它将文件锁定为打开状态,防止其他进程使用它。
使用文件流最安全的方法是使用 using 语句。
简短的回答,为该操作分配的资源不会被释放,更不用说它可能会锁定该文件。
考虑
using( var fout = new StreamWriter(saveFileDialog.FileName){ fout.write(textBox.Text); }
GC 将如何为您关闭它。但问题是在 GC 关闭该流之前,您没有必要暂停资源
您可以尝试using blok
以clean your no managed object
using (var streamWriter = new StreamWriter(saveFileDialog.FileName))
{
streamWriter.Write(textBox.Text);
}
这将是一个记忆危险。
我总是在“使用”语句中使用 StreamWriter
using(StreamWriter fout = new StreamWriter(saveFileDialog.FileName)
{
fout.Write(textBox.Text);
}