gpt4 book ai didi

C# 在处理 Stream 的对象时使用 Statement

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:15 25 4
gpt4 key购买 nike

我有方法:

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 文件,但不写入“一行文本”。里面。

我不明白为什么。

当对象离开 using Statement 的范围时,我读到 using Statement 只需调用 Dispose() 方法。所以它应该用于处理来自 CLR 的非托管代码,但为什么不使用语句我不能将文本消息写入我的机器文件?

最佳答案

缓存在后台进行: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# 在处理 Stream 的对象时使用 Statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53156845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com