我正在为一位严格遵守LOC的教授工作。出于这个原因,我想做以下事情:
(new StreamWriter(saveFileDialog.FileName)).Write(textBox.Text);
而不是
StreamWriter sw = new StreamWriter(saveFileDialog.FileName);
sw.Write(textBox.Text);
sw.Close();
在第一个例子中,我不关闭流。这个可以吗?它会导致任何安全或内存问题吗?
答案 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 blok
来clean 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);
}