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()以便将数据放入文件中。这是为什么?
答案 0 :(得分:4)
所有Writers / Readers缓冲区输入的Stream
对象,直到下列任何一个发生:
Flush()
被召唤。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
语句,以确保为您正确处理和刷新流。