模拟文件指针C ++?

时间:2011-05-01 12:09:22

标签: c++ file pointers bitmap

我正在尝试从存档中加载位图。我在位图类中使用了一个指向文件名的字符指针,然后在它位于同一目录中时加载它。位图加载类经过了很好的测试,我不想太乱用它。问题是它使用文件指针加载并执行其所有文件操作。有没有办法模拟文件指针,实际上是从内存中的块中读取?

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

3 个答案:

答案 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.它支持您需要的功能。

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