2017-06-19 62 views
1

我有我想寫(實際追加)兩者中的二進制文件,使我得到的結果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

此:

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

不開"test.bin"寫作,r表示 「讀」。

你應該使用:

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

這裏,a意味着 「追加」。有沒有必要尋求結尾,附加意味着你只能做這麼追加所有寫操作將在文件的結尾。

你也應該錯誤檢查的I/O功能。

+0

非常感謝你.. – Kris

+1

注意檢查'fwrite'上的I/O會顯示它沒有寫任何東西。 –

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); 
+0

非常感謝。ab'是個好主意。之前就知道了 – Kris

相關問題