我有这样的方法:
public static void Main()
{
string path = @"C:\Temp\ProgrammingInCSharp\DirectoryInfo\111.txt";
using (FileStream fileStream = File.Create(path))
{
using (BufferedStream bufferedStream = new BufferedStream(fileStream))
{
using (StreamWriter streamWriter = new StreamWriter(bufferedStream))
{
streamWriter.WriteLine("A line of text.");
}
}
}
}使用3的语句和方法工作得很好:创建111.txt并编写“一行文本”。在里面。但是,当我将方法更改为:
public static void Main()
{
string path = @"C:\Temp\ProgrammingInCSharp\DirectoryInfo\111.txt";
FileStream fileStream = File.Create(path);
BufferedStream bufferedStream = new BufferedStream(fileStream);
StreamWriter streamWriter = new StreamWriter(bufferedStream);
streamWriter.WriteLine("A line of text.");
}它只创建111.txt文件,但不写“一行文本”。在里面。
我不明白为什么。
在我阅读使用语句时,当对象离开使用语句的范围时,只需调用Dispose()方法即可。因此,应该使用它来处理来自CLR的非托管代码,但是为什么不使用语句,我就不能将文本消息写入机器的文件?
发布于 2018-11-05 14:59:37
后台正在进行缓存:WriteLine写入缓存,而不是直接写入文件。因此,如果文件没有正确关闭,缓存实际上不会被写入磁盘。using语句处理对象,对象将缓存刷新到文件中并关闭文件。
您可以在这里看到StreamWriter.Dispose()的源代码(注意它调用了Flush()):https://referencesource.microsoft.com/#mscorlib/system/io/streamwriter.cs,236
注意,对于多个using语句,只需要一个代码块。效果是一样的,但它只是更容易理解。
using (FileStream fileStream = File.Create(path))
using (BufferedStream bufferedStream = new BufferedStream(fileStream))
using (StreamWriter streamWriter = new StreamWriter(bufferedStream))
{
streamWriter.WriteLine("A line of text.");
}https://stackoverflow.com/questions/53156845
复制相似问题