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

C++ determining size of data before writing it to a file

本文关键字:数据 文件      更新时间:2023-10-16

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

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字节的占位符,然后写数据,然后用fseek()返回占位符来写长度。

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

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