我正在尝试从存档加载位图。我的位图类接受一个指向文件名的字符指针,如果它在同一目录中,则加载它。位图加载类经过了很好的测试,我不想过多地干扰它。问题是它使用文件指针来加载和执行所有的文件操作。有没有办法模拟一个文件指针,实际上有它从内存块读取代替?
对不起,如果这是一个奇怪的问题。
重构它并创建与以前完全相同的参数的函数:如果使用从磁盘读取的fopen、read和fseek,则创建从内存读取文件的mopen、mread和mseek。你只需要修改函数的名字。
这应该很容易,没有风险,代码最终不会看起来像一个肮脏的黑客。
您也可以使用管道。管道是一块内存,您可以在其中使用文件原语进行读写。这就是你想要的
(假设POSIX操作系统)
创建管道:int p[2];
pipe(p);
使用fdopen()将管道文件描述符转换为FILE*
FILE *emulated_file = fdopen(p[0], "r");
然后将您想要的内容写入管道的写端:
write(p[1], 17 ,"whatevereyouwant");
:
buf[32];
fread(&buf,1,32, emulated_file);
cout<<buf<<endl;
将输出"whateveryouwant"
查看John Ratcliff的文件接口替换标准文件I/O。它支持您需要的功能。
您仍然需要重构位图加载代码以使用新接口。但是,该接口支持从磁盘上的文件或内存中的内存块加载(以及写入磁盘上的文件或可扩展内存块)。