需要调用StreamWriter.Flush()将字符写入文件?

时间:2016-06-17 08:42:48

标签: c# io

using System;
using System.IO;
using System.Text;

class Test {
    static void Main() {
    byte[] a = { 10, 20, 30, 40 };
    FileStream fileByte = new FileStream("fileByte.txt", FileMode.Create);
    fileByte.Write(a, 0, 4);

    StreamWriter fileChar = new StreamWriter("fileChar.txt");
    fileChar.Write("test");
    fileChar.Flush();


    BinaryWriter fileBin = new BinaryWriter(new FileStream("fileBin.txt", FileMode.Create));
    fileBin.Write('A');

     }
}

嗨,我写了这些代码让自己熟悉C#中的I / O.我发现我必须添加fileChar.Flush()来将字符写入文件。但是没有必要为FileStream或BinaryWriter调用相应的Flush()以便将数据放入文件中。这是为什么?

3 个答案:

答案 0 :(得分:4)

所有Writers / Readers缓冲区输入的Stream对象,直到下列任何一个发生:

  • Flush()被召唤。
  • Stream的AutoFlush属性设置为true
  • 流被丢弃。

您可以使用using关键字为您处理以下内容:

using(StreamWriter fileChar = new StreamWriter("fileChar.txt"))
{
    fileChar.Write("test");
}

这样,StreamWriter在块的末尾被处理掉,缓冲区将被写入。

答案 1 :(得分:1)

刷新流不会刷新其底层编码器,除非您明确调用Flush或Close。将AutoFlush设置为true意味着在每次写操作后将数据从缓冲区刷新到流,但不会刷新编码器状态。这允许编码器保持其状态

答案 2 :(得分:0)

每个与流相关的类都有某种形式的缓冲,这基本上是一个实现细节。

您可以看到StreamWriter.AutoFlush属性(here)来配置是否需要刷新。 对于其他类,它不是,主要是因为它们按照它们的方式编程......

我想指出你应该在程序退出之前关闭你的流。 尝试使用using语句,以确保为您正确处理和刷新流。