模拟一个文件指针c++



我正在尝试从存档加载位图。我的位图类接受一个指向文件名的字符指针,如果它在同一目录中,则加载它。位图加载类经过了很好的测试,我不想过多地干扰它。问题是它使用文件指针来加载和执行所有的文件操作。有没有办法模拟一个文件指针,实际上有它从内存块读取代替?

对不起,如果这是一个奇怪的问题。

重构它并创建与以前完全相同的参数的函数:如果使用从磁盘读取的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。它支持您需要的功能。

您仍然需要重构位图加载代码以使用新接口。但是,该接口支持从磁盘上的文件或内存中的内存块加载(以及写入磁盘上的文件或可扩展内存块)。

相关内容

  • 没有找到相关文章

最新更新