我的任务是更新当前从磁盘读取配置文件并填充结构的函数:
static int LoadFromFile(FILE *Stream, ConfigStructure *cs)
{
int tempInt;
...
if ( fscanf( Stream, "Version: %d\n",&tempInt) != 1 )
{
printf("Unable to read version number\n");
return 0;
}
cs->Version = tempInt;
...
}
一个允许我们绕过将配置写入磁盘而直接将其传递到内存中的方法,大致相当于:
static int LoadFromString(char *Stream, ConfigStructure *cs)
需要注意的几点:
- 当前的 LoadFromFile 函数非常密集和复杂,以向后兼容的方式读取数十个版本的配置文件,这使得整体逻辑的重复非常痛苦。
- 生成配置文件的函数和读取它的函数来自旧系统的完全不同的部分,因此不共享任何数据结构,所以我不能直接传递它们。我可能会编写一个包装器,但同样,它需要以向后兼容的方式处理传入的任何结构。
- 我很想将文件按原样作为字符串传递(如上面的原型中)并将所有 fscanf 转换为 sscanf 但我必须手动处理指针的递增(并可能处理缓冲区溢出错误)。
- 这必须保留在 C 中,因此没有像流这样的 C++ 功能可以在这里提供帮助
我错过了更好的选择吗?有没有办法创建一个实际上只是指向内存而不是磁盘的位置的 FILE *?非常感谢任何指针、建议或其他帮助。