【发布时间】:2017-04-13 23:42:05
【问题描述】:
我们有接受 FILE* (CImg) 的库。出于性能原因,我们希望在不访问磁盘的情况下处理已经在内存中的数据。目标平台是windows,不幸的是不支持fmemopen(和funopen)
char* buf = new char[sz];
FILE *fp = fopen("C:\\test.dat", "wb");
int r = setvbuf(fp, buf, _IOFBF, sz);
r = fwrite(src_buf, 1, sz, fp); // Here r contains right size
fseek(fp, 0, SEEK_END);
size_t sz2 = ftell(fp); // sz2 contains right size as well
rewind(fp);
// Test (something like this actually is somewhere deep inside library)
char* read_buf = new char[sz];
r = fread(read_buf, 1, sz, fp); // Zero!
最终 fread() 无法读取任何内容...有什么建议吗?
【问题讨论】:
-
为什么用 C++ 标记?这看起来像 C。
-
有没有可能使用内存映射文件?
-
fp以只写方式打开。 -
你是如何将数据放到内存中的?在不知道这一点的情况下,没有人可以就如何从内存中读取它提供建议(无论是使用
FILE *还是任何其他方式)。 -
您打开 fp 为“wb”,然后尝试从中读取?