使用 StreamWriter 和 FileStream 写入 txt 文件

本文关键字:txt 文件 写入 FileStream StreamWriter 使用 | 更新日期: 2023-09-27 17:57:00

在使用带有FileStreamStreamWriter将文本附加到 .NET 4.5 中的现有文件时,我遇到了一些有趣的事情(没有尝试任何较旧的框架)。我尝试了两种方法,一种有效,一种无效。我想知道两者之间有什么区别。

两种方法的顶部都包含以下代码

if (!File.Exists(filepath))
    using (File.Create(filepath));

我在using语句中创建了该内容,因为我通过个人经验发现这是确保应用程序完全关闭文件的最佳方法。

非工作方法:

using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
    (new StreamWriter(f)).WriteLine("somestring");

使用此方法,最终不会将任何内容附加到文件中。

工作方法:

using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
    using (StreamWriter s = new StreamWriter(f))
        s.WriteLine("somestring");

我已经做了一些谷歌搜索,不知道要搜索什么,也没有找到任何信息。那么,为什么匿名StreamWriter在(非匿名? StreamWriter有效吗?

使用 StreamWriter 和 FileStream 写入 txt 文件

听起来你没有冲洗流。

http://msdn.microsoft.com/en-us/library/system.io.stream.flush.aspx

看起来 StreamWriter 在写入最终目标(在本例中为文件)之前写入缓冲区。您还可以设置 AutoFlush 属性,而不必显式刷新它。

http://msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush.aspx

为了回答您的问题,当您使用"using"块时,它会在 StreamWriter 上调用 dispose,而 StreamWriter 又必须调用 Flush。

两个代码片段的区别在于using的使用。using 语句在块的末尾释放对象。

StreamWriter在将数据写入基础流之前缓冲数据。释放StreamWriter会刷新缓冲区。如果不刷新缓冲区,则不会写入任何内容。

从 MSDN:

必须调用 Close 以确保所有数据都正确写出到基础流。

另请参阅:何时应在 C# 中使用"using"块?