首先,我在应用程序启动时将所有变量加载到内存中。 随着时间的推移,变量的数量变得如此巨大,以至于我不想再那么做了。 相反,我只在需要它们时才检索它们(使用映射文件,但那是另一个故事)。
首先,我将变量写入文件。 (这反复多次......)
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...
}
但是现在我需要动态加载变量,我需要跟踪它们实际存储的位置。
我的问题是:如何找出当前的写作位置?我想并希望我能用它来跟踪数据实际驻留在文件中的位置。
答案 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);
实际上,这比多次读/写操作要快得多。