我必須將數字數據寫入二進制文件。由於我處理的一些數據向量可能會有幾個演出,我學會了不使用C++ iostream。相反,我想使用C文件*。我遇到了一個問題,我需要將一些元數據寫入二進制文件的前面。由於一些元數據一開始並不知道,因此我需要將元數據追加到文件中的適當偏移處。追加二進制文件
例如,可以說我必須輸入uint16_t表示年,月和日,但首先我需要跳過第一個條目(爲精度uint32_t值);
我不知道我在做什麼錯,但我似乎無法追加與「ab」的文件。 下面是我寫的一個例子:
#include<cstdio>
uint16_t year = 2001;
uint16_t month = 8;
uint16_t day = 23;
uint16_t dateArray[]={year , month, day};
File * fileStream;
fileStream = fopen("/Users/mmmmmm/Desktop/test.bin" , "wb");
if(fileStream){
// skip the first 4 bytes
fseek (fileStream , 4 , SEEK_SET);
fwrite(dateArray, sizeof(dateArray[0]) ,(sizeof(dateArray)/sizeof(dateArray[0])), filestream);
fclose(filestream);
}
// loops and other code to prepare and gather other parameters
//現在追加與精度的文件的前面。
uint32_t precision = 32;
File *fileStream2;
fileStream2 = fopen("/Users/mmmmmm/Desktop/test.bin" , "ab");
if(fileStream2){
// Get to the top of the file
rewind(fileStream2);
fwrite(&precision, sizeof(precision) , 1 , fileStream2);
fclose(fileStream2);
}
附加的數據不寫入。如果我將其更改爲「wb」,則會覆蓋文件。我能夠使它與「r + b」一起工作,但我不明白爲什麼。我認爲「ab」是適當的。另外,我應該使用緩衝區還是這是一個足夠的方法?
謝謝你的提醒
順便說一句,這是MacOSX上
你爲什麼選擇不使用'iostream' –
你可以追加到文件 – CyberDem0n
@科爾約翰遜方式太慢。 C文件吸菸基準測試iostream – Miek