将两个数组附加到单个二进制文件中

时间:2017-06-19 08:20:57

标签: c

我想在二进制文件中编写两个数组(实际上是追加),以便得到结果1,2,3,4,5,6,7,8,9,10。我的以下代码仅执行第一部分,但不附加第二部分:

FILE *fp;
int sum1[5]={1,2,3,4,5};
int sum2[10]={6,7,8,9,10};
int sum[10]={0};
int i;

// Write the first array sum1
fp = fopen("test.bin","wb");
fwrite(sum1, sizeof(int), 5, fp);
fclose(fp);

// Write (append) the second array sum2 at the end of test.bin file
fp = fopen("test.bin","rb");
fseek(fp, 5, SEEK_SET);
fwrite(sum2, sizeof(int), 5, fp);
fclose(fp);

// Show the result if both sum1 and sum2 are merged.
fp = fopen("test.bin","rb");
fread(sum, sizeof(int), 10, fp);

for ( i = 0; i < 10; ++i) {
    printf("%d, ", sum[i]);
}
printf("\n");
fclose(fp);

结果是1, 2, 3, 4, 5, 0, 0, 0, 0, 0,。这不是我想要的。如何修改代码以反映我的需求?谢谢

2 个答案:

答案 0 :(得分:2)

此:

fp = fopen("test.bin","rb");

无法打开"test.bin"进行撰写,r代表&#34;阅读&#34;。

您应该使用:

fp = fopen("test.bin","ab");

此处,a表示&#34;追加&#34;。没有必要寻找到最后,追加意味着你只能附加所以所有写入都将在文件的末尾。

此外,您应该对I / O功能进行错误检查。

答案 1 :(得分:1)

这部分严重错误:

fp = fopen("file.bin","rb");
fseek(fp, 5, SEEK_SET);
fwrite(sum2, sizeof(int), 5, fp);
fclose(fp);
  • 首先,您在读取模式中打开文件,因此fwrite无效。通过读写
  • 替换模式
  • 然后你的fseek偏移是错误的,乘以整数大小,否则你会在错误的位置写字。

修正:

fp = fopen("file.bin","rb+");
fseek(fp, 5 * sizeof(int), SEEK_SET);
fwrite(sum2, sizeof(int), 5, fp);
fclose(fp);

我刚刚意识到你只是在模仿“追加”模式,所以有一种更简单的方法:

fp = fopen("file.bin","ab");
fwrite(sum2, sizeof(int), 5, fp);
fclose(fp);