我有方法:
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个using语句和方法的效果很好:创建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文件,但不写“一行文本”。内。
我不明白为什么。
当我阅读使用Statement时,当对象离开使用Statement的范围时,只需调用
Dispose()
方法。因此,应该使用它来处置CLR中的非托管代码,但是为什么不使用Statement我无法将文本消息写入机器文件中? 最佳答案
后台正在进行缓存: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.");
}
关于c# - C#使用Stream时使用Statement对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53156845/