我想在二进制文件中编写两个数组(实际上是追加),以便得到结果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,
。这不是我想要的。如何修改代码以反映我的需求?谢谢
答案 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);