文件中的数据位置

时间:2013-05-04 19:43:28

标签: c++ windows file

首先,我在应用程序启动时将所有变量加载到内存中。 随着时间的推移,变量的数量变得如此巨大,以至于我不想再那么做了。 相反,我只在需要它们时才检索它们(使用映射文件,但那是另一个故事)。

首先,我将变量写入文件。 (这反复多次......)

vector<udtAudioInfo>::iterator it = nAudioInfos.Content().begin();
for (;it != nAudioInfos.Content().end(); ++it)

    //I think here I should store the position where the data will begin in the file
    //I still need to add code for that...

    //now write the variables 
    fwrite(&it->UnitID,sizeof(int),1,outfile);
    fwrite(&it->FloatVal,sizeof(double),1,outfile);

    //I think here I should store the length of the data written
    //I still need to add code for that...
 }

但是现在我需要动态加载变量,我需要跟踪它们实际存储的位置。

我的问题是:如何找出当前的写作位置?我想并希望我能用它来跟踪数据实际驻留在文件中的位置。

2 个答案:

答案 0 :(得分:1)

您可以在阅读或编写变量时使用函数ftell()

例如,在上面的示例代码中,您可以在每次迭代开始时找到位置:

 long fpos = ftell( outfile );

当您准备返回该位置时,可以使用fseek()。 (下面,SEEK_SET使相对于文件开头的位置。)

 fseek ( infile, position, SEEK_SET );

答案 1 :(得分:0)

我建议您一次阅读所有变量,也许使用结构:

struct AppData
{
    udtAudioInfo audioInfos[1024];
    int infoCount;

    ... // other data
};

然后通过以下方式加载/保存:

AppData appData;
fread(appData, 1, sizeof(AppData), infile);
...
fwrite(appData, 1, sizeof(AppData), outfile);

实际上,这比多次读/写操作要快得多。