C# 为什么在使用BinaryWriter时二进制文件的大小没有减小

C# 为什么在使用BinaryWriter时二进制文件的大小没有减小,c#,.net,C#,.net,为什么使用BinaryWriter时二进制文件的大小没有减小? 考虑这个第一段代码: static void write() { BinaryWriter sr = new BinaryWriter(File.OpenWrite("bin.txt")); int m; m = 123456; sr.Write(m); m = 122; sr.Write(m); sr.Close(); } 使用上述方法时,bin.txt的大小为8字节 但是

为什么使用
BinaryWriter
时二进制文件的大小没有减小? 考虑这个第一段代码:

static void write()
{
    BinaryWriter sr = new BinaryWriter(File.OpenWrite("bin.txt"));
    int m;
    m = 123456;
    sr.Write(m);
    m = 122;
    sr.Write(m);
    sr.Close();
}
使用上述方法时,
bin.txt
的大小为8字节

但是当我从函数中删除
m=122
和第二个
Write
调用并再次运行程序时,我希望文件大小更改为4字节,但仍然是8字节

static void write()
{
    BinaryWriter sr = new BinaryWriter(File.OpenWrite("bin.txt"));
    int m;
    m = 123456;
    sr.Write(m);
    sr.Close();
}
当运行下面的函数时,通过在其中添加双类型,文件的大小从8增加到12

static void write()
{
    BinaryWriter sr = new BinaryWriter(File.OpenWrite("bin.txt"));
    int m;
    m = 123456;
    sr.Write(m);
    double pp = 1233.00;
    sr.Write(pp);
    sr.Close();
}

这与
BinaryWriter
无关,事实上-这是一个调用,其文档包括:

OpenWrite
方法打开一个文件(如果文件路径已经存在),或者创建一个新文件(如果不存在)。对于现有文件,它不会将新文本附加到现有文本。相反,它会用新字符覆盖现有字符。如果用较短的字符串(例如“第二次运行”)覆盖较长的字符串(例如“这是OpenWrite方法的测试”),则文件将包含字符串的混合(“OpenWrite方法的第二次运行测试”)

因此,您的第二个方法只写入四个字节,但它会覆盖文件的前四个字节,而不会截断文件本身

改为使用,任何现有文件都将被截断

我还建议您使用
语句,而不是手动关闭资源:

using (var writer = new BinaryWriter(File.Create("foo"))
{
    // Code here, no need to call writer.Close()
}

这与
BinaryWriter
无关,事实上-这是一个调用,其文档包括:

OpenWrite
方法打开一个文件(如果文件路径已经存在),或者创建一个新文件(如果不存在)。对于现有文件,它不会将新文本附加到现有文本。相反,它会用新字符覆盖现有字符。如果用较短的字符串(例如“第二次运行”)覆盖较长的字符串(例如“这是OpenWrite方法的测试”),则文件将包含字符串的混合(“OpenWrite方法的第二次运行测试”)

因此,您的第二个方法只写入四个字节,但它会覆盖文件的前四个字节,而不会截断文件本身

改为使用,任何现有文件都将被截断

我还建议您使用
语句,而不是手动关闭资源:

using (var writer = new BinaryWriter(File.Create("foo"))
{
    // Code here, no need to call writer.Close()
}

请不要将文本中的每个单词大写,这会使阅读变得非常困难。请在发布前查看预览,以确保只有代码被格式化为代码,并且缩进良好。当您正确测试(每次运行前删除文件)时,结果将是您期望的结果。@Henk Holterman,是的,我尝试过删除,但效果很好。但我希望这在不删除文件的情况下工作确保关闭前刷新。有时数据确实会立即写入。我希望这在不删除文件的情况下正常工作,但这纯粹是表面现象。您的ShIfT键仍然有问题。请不要将文本中的每个单词大写-这会使阅读变得非常困难。请在发布前查看预览,以确保只有代码被格式化为代码,并且缩进良好。当您正确测试(每次运行前删除文件)时,结果将是您期望的结果。@Henk Holterman,是的,我尝试过删除,但效果很好。但我希望这在不删除文件的情况下工作确保关闭前刷新。有时数据确实会立即写入。我希望这在不删除文件的情况下正常工作,但这纯粹是表面现象。您的ShIfT键仍有问题。