我必须将数值数据写入二进制文件。由于我处理的一些数据向量的大小可能是几千兆,因此我学会了不使用 C++ iostream。相反,我想使用 C File*。我马上就遇到了一个问题,我需要将一些元数据写入二进制文件的前面。由于最初不知道某些元数据,因此我需要将元数据附加到文件中的适当偏移量。
例如,假设我必须为年、月和日输入一个 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 上