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键仍有问题。