大家好,如何在结构中存储二进制文件数据?
我有一个如下所示的文件(Material.dat),它是二进制文件,我想从文件中读取数据并将其放入结构中,以便使用GetRecord()函数。
HANDLE hFileMac = ::CreateFile(_T("Material.dat"), GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FALSE ? FILE_FLAG_SEQUENTIAL_SCAN : FILE_ATTRIBUTE_NORMAL, NULL);
if (!(hFileMac != INVALID_HANDLE_VALUE))
{
return;
}
GetRecord(hFileMac, RECORD_NUMBER, sizeof(Header), reinterpret_cast<void *>(&Header));
我的疑问是什么作为记录号传递给Get Record()函数? (hFileMac,RECORD_NUMBER,sizeof(Header),reinterpret_cast(& Header));
int GetRecord(HANDLE hFile, int RecordNumber, int RecordSize, void *RecordPtr)
{
if (RecordNumber <= 0 || RecordSize <= 0)
return 1;
LONG lOffset = (RecordNumber - 1) * RecordSize;
if (SetFilePointer(hFile, lOffset, NULL, FILE_BEGIN) == 0xFFFFFFFF)
return 2;
DWORD dwSize;
if (::ReadFile(hFile, RecordPtr, RecordSize, &dwSize, NULL) == 0)
return 3;
return 0;
}
您必须跟踪您已阅读的条目数量。可能二进制文件中的每个条目都具有相同的大小(如果不是,那么这个函数将不起作用,因为它假定每个元素的大小相同),所以提供'RecordNumber'允许偏移计算在哪里查找这个特定条目。 – Rogus
谷歌protobuf可能是你的解决方案。 – sailfish009
是的,二进制文件中的每个条目具有相同的大小。如何跟踪条目数量以及如何计算偏移量?你能否让我清楚明白。 –