首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用流对象时使用语句的C#

在使用流对象时使用语句的C#
EN

Stack Overflow用户
提问于 2018-11-05 14:56:38
回答 1查看 1.3K关注 0票数 1

我有这样的方法:

代码语言:javascript
复制
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并编写“一行文本”。在里面。但是,当我将方法更改为:

代码语言:javascript
复制
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的非托管代码,但是为什么不使用语句,我就不能将文本消息写入机器的文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-05 14:59:37

后台正在进行缓存:WriteLine写入缓存,而不是直接写入文件。因此,如果文件没有正确关闭,缓存实际上不会被写入磁盘。using语句处理对象,对象将缓存刷新到文件中并关闭文件。

您可以在这里看到StreamWriter.Dispose()的源代码(注意它调用了Flush()):https://referencesource.microsoft.com/#mscorlib/system/io/streamwriter.cs,236

注意,对于多个using语句,只需要一个代码块。效果是一样的,但它只是更容易理解。

代码语言:javascript
复制
using (FileStream fileStream = File.Create(path))
using (BufferedStream bufferedStream = new BufferedStream(fileStream))
using (StreamWriter streamWriter = new StreamWriter(bufferedStream))
{
    streamWriter.WriteLine("A line of text.");
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53156845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档