在相机采集程序中,通常需要将相机采集的图像数据和此时的图像高宽时间戳之类的存储下来。而所有数据在计算机内部都是用二进制表示的,所以可以将这些数据存储为二进制文件:DAT和IDX类型。DAT文件类型主要是“数据”文件。可以是任何内容,比如:文字,图形,视频或一般的二进制数据,它并没有统一具体的结构。IDX文件用来存放某一条数据在对应的dat文件中的位置信息。
Dat文件格式如下:
文件头:8个字节,前4个字节为版本号,之后4个字节为文件创建时间。
idx文件格式:
文件头:8个字节,前4个字节为版本号,之后4个字节为文件创建时间。
fwrite()函数以二进制方式向文件流中写入数据,其原型为:
size_t fwrite(void * buffer, size_t size, size_t count, FILE * stream);
参数
buffer为数据源地址,
size为每个单元的字节数
count为单元个数
*tream为文件流指针
返回值
返回成功写入的单元个数count。
如果小于count,则说明发生了错误,文件流错误标志位将被设置。
fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中,如果参数stream为NULL,fflush()会将所有打开的文件数据更新。
int fflush(FILE * stream)
返回值
成功返回0,失败返回EOF,错误代码存于errno中。
下述代码为写入SavePointsData结构体及写入profileData数据内容。
SavePointsData* go2ProfileData = (SavePointsData*)data;
int len = sizeof(SavePointIndexData);
SavePointIndexData go2_ProfileIndexData;
go2_ProfileIndexData.currFrameOffset = _ftelli64(m_pPointsFile);
go2_ProfileIndexData.currFrameLen = sizeof(short)*go2ProfileData->profilePointCount;
go2_ProfileIndexData.recvTime = go2ProfileData->recvTime;
go2_ProfileIndexData.XOffset = go2ProfileData->XOffset;
go2_ProfileIndexData.XResolution = go2ProfileData->XResolution;
go2_ProfileIndexData.ZOffset = go2ProfileData->ZOffset;
go2_ProfileIndexData.ZResolution = go2ProfileData->ZResolution;
//写入SavePointsData结构体
if (fwrite(&go2_ProfileIndexData, 1, len, m_pPointsFileIndex) != len)
{
...
}
fflush(m_pPointsFileIndex);
//写入profileData数据内容
len = sizeof(short)*go2ProfileData->profilePointCount;
if (fwrite(go2ProfileData->profileData, 1, len, m_pPointsFile) != len)
{
...
}
fflush(m_pPointsFile);