C语言 如何在二进制文件中插入固定数量的位置?

n3ipq98p  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(173)

例如,我需要在一个二进制文件中插入数据,每次插入都是一个100位的块。由于我知道它从哪里开始,我可以很容易地使用fseek/seekg访问元素0 * 100,1 * 100,2 * 100,... n * 100。那么我如何保证每次插入都在k * 100的位置结束呢?
或者,我是否可以将寄存器添加到文件中,并像数组一样对其进行迭代?

mklgxw1f

mklgxw1f1#

文件系统通常不允许任意插入。至少您需要读取您希望写入的点之后的文件内容,写入插入内容,然后写回保存的数据。更常见的情况是创建一个新的临时文件,写入前面的内容,新内容,然后写入后面的内容。并且只有在新文件被完全写入之后,才删除旧文件并将新文件重命名为具有原始文件的名称。这样做是为了确保文件始终具有有效的内容,即使在操作过程中您的程序或甚至计算机本身发生了一些事情。
一些文件系统确实有能力写入非常特定的插入,但只有在大小远远大于100字节时。当这个能力存在时,它将只工作在2的大小和偏移量的某些幂。

1dkrff03

1dkrff032#

循环变量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

相关问题