数値データをバイナリ ファイルに書き込む必要があります。私が扱うデータ ベクトルの一部はサイズが数ギガになる可能性があるため、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上にあります