C ++在将数据写入文件之前确定数据的大小

时间:2013-05-06 13:46:10

标签: c++ file-io

我将一些数据序列化为这样的文件:

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.

谢谢。

2 个答案:

答案 0 :(得分:4)

我必须在自己面前这样做。

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

  • 将4字节占位符写入文件。
  • ftell()获取当前文件位置。
  • 将数据写入文件。
  • ftell()获得新职位。
  • 计算长度:两个ftell()值之间的差异。
  • 然后fseek()回到占位符并写下长度。

答案 1 :(得分:2)

您正在为unsigned char每个ByteFeature写一个52 * nByteFeatures.Contents().size()个文件。所以你写的总字节数是{{1}},假设一个字符等于一个字节。