0

我正在将一些数据序列化到这样的文件中:

vector<ByteFeature>::iterator it = nByteFeatures.Content().begin();
for (;it != nByteFeatures.Content().end(); ++it)
{
    for ( int i = 0; i < 52; i++)
    {
        fwrite( &it->Features[i], sizeof(unsigned char), 1, outfile);
    }
}   

但我想提前知道文件中有多少字节。我想把这个数字写在实际数据的前面。因为在某些情况下我将不得不跳过加载这些数据,并且我需要知道我必须跳过多少字节。

有更多数据写入磁盘,对我来说至关重要的是,我可以直接在实际数据之前写入字节数。我不想将此号码存储在单独的文件中。

 .Content.size() would only tell me how many "items" are in there, but not the actual size of the data.

谢谢你。

4

2 回答 2

4

我必须先做这件事。

我采取的方法是写一个 4 字节的占位符,然后是数据,然后 fseek() 回到占位符以写入长度。

  • 将 4 字节占位符写入文件。
  • ftell() 获取当前文件位置。
  • 将数据写入文件。
  • ftell() 获取新位置。
  • 计算长度:两个 ftell() 值之间的差。
  • 然后 fseek() 返回占位符并写入长度。
于 2013-05-06T13:51:28.463 回答
2

您正在将 52unsigned char秒写入每个ByteFeature. 所以你写的总字节数是52 * nByteFeatures.Contents().size(),假设一个字符等于一个字节。

于 2013-05-06T13:59:04.963 回答