我正在尝试从存档中加载位图。我在位图类中使用了一个指向文件名的字符指针,然后在它位于同一目录中时加载它。位图加载类经过了很好的测试,我不想太乱用它。问题是它使用文件指针加载并执行其所有文件操作。有没有办法模拟文件指针,实际上是从内存中的块中读取?
对不起,如果这是一个奇怪的问题。
答案 0 :(得分:5)
重构它并创建带有与之前完全相同的参数的函数:如果使用从磁盘读取的fopen,fread和fseek,则创建从内存中读取文件的mopen,mread和mseek。您只需要修改函数的名称。
它应该很容易没有风险,代码最终看起来不像是一个肮脏的黑客。
答案 1 :(得分:4)
您也可以使用烟斗。管道是一块内存,您可以使用文件基元进行读写。这基本上就是你想要的
(假设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”。
答案 2 :(得分:2)
查看John Ratcliff's File Interface替换标准文件I / O.它支持您需要的功能。
您仍然需要重构位图加载代码才能使用新界面。但是,此接口支持从磁盘上的文件或内存中的内存块(以及写入磁盘上的文件或可扩展内存块)进行加载。