0

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

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

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...
 }

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

我的问题是:如何找出当前的写入位置?我认为并希望我可以使用它来跟踪数据实际驻留在文件中的位置。

4

2 回答 2

1

ftell()您可以在读取或写入变量时使用该函数。

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

 long fpos = ftell( outfile );

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

 fseek ( infile, position, SEEK_SET );
于 2013-05-04T19:46:55.690 回答
0

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

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

    ... // other data
};

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

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

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

于 2013-05-04T19:56:11.957 回答