例如,我需要在一个二进制文件中插入数据,每次插入都是一个100位的块。由于我知道它从哪里开始,我可以很容易地使用fseek/seekg访问元素0 * 100,1 * 100,2 * 100,... n * 100。那么我如何保证每次插入都在k * 100的位置结束呢?或者,我是否可以将寄存器添加到文件中,并像数组一样对其进行迭代?
mklgxw1f1#
文件系统通常不允许任意插入。至少您需要读取您希望写入的点之后的文件内容,写入插入内容,然后写回保存的数据。更常见的情况是创建一个新的临时文件,写入前面的内容,新内容,然后写入后面的内容。并且只有在新文件被完全写入之后,才删除旧文件并将新文件重命名为具有原始文件的名称。这样做是为了确保文件始终具有有效的内容,即使在操作过程中您的程序或甚至计算机本身发生了一些事情。一些文件系统确实有能力写入非常特定的插入,但只有在大小远远大于100字节时。当这个能力存在时,它将只工作在2的大小和偏移量的某些幂。
1dkrff032#
循环变量i不是您要写入的值。您要写入值i。
i
for(int i=0;i<10;i++) { fwrite(&i,sizeof(i),1,fp); }
应该是
for(int i=0;i<10;i++) { fwrite(&i,sizeof(int),1,fp); }
在您的代码中,您正在写入循环变量的值,该值始终为0(仅写入一个字节)。您可能希望写入值i。
0
2条答案
按热度按时间mklgxw1f1#
文件系统通常不允许任意插入。至少您需要读取您希望写入的点之后的文件内容,写入插入内容,然后写回保存的数据。更常见的情况是创建一个新的临时文件,写入前面的内容,新内容,然后写入后面的内容。并且只有在新文件被完全写入之后,才删除旧文件并将新文件重命名为具有原始文件的名称。这样做是为了确保文件始终具有有效的内容,即使在操作过程中您的程序或甚至计算机本身发生了一些事情。
一些文件系统确实有能力写入非常特定的插入,但只有在大小远远大于100字节时。当这个能力存在时,它将只工作在2的大小和偏移量的某些幂。
1dkrff032#
循环变量
i
不是您要写入的值。您要写入值i
。应该是
在您的代码中,您正在写入循环变量的值,该值始终为
0
(仅写入一个字节)。您可能希望写入值i
。