如何从内存映射文件中获取数据?

时间:2015-03-23 17:44:00

标签: visual-c++ memory-mapped-files file-read

我的文件名为By_a_waterfal.txt,内容如下:

By a waterfal I'm calling you.
We can share it all beneath a ceiling of blue.
We'll spend a heavenly day
Here where the whispering waters play.

我通过调用函数来创建此文件的内存映射:

HANDLE hFileMapping = CreateFileMapping(handleOfFile, NULL, PAGE_READ, 0, 0, NULL);

其中handleOfFile是By_a_waterfal.txt文件的句柄。 然后我做以下的电话:

LPVOID lpFileMap = MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);

如何通过使用MapViewOfFile调用创建的视图访问内存映射By_a_waterfal.txt文件的内容?

2 个答案:

答案 0 :(得分:1)

如果你真的必须使用内存映射而不是std :: ifstream,那么:

1)检查lpFileMap是否为NULL。

2)获取视图大小为GetFileSize(handleOfFile)或VirtualQuery(lpFileMap)。

3)如果文件具有ANSI编码(非Unicode),则将lpFileMap强制转换为char *并继续(不要忘记没有0终结符)

auto data = static_cast<const char*>(lpFileMap);
std::string strData(data, size);
std::cout << stdData;

答案 1 :(得分:0)

lpFileMap是指向内容的指针。如果您希望内容为const char*,请将其投射:

const char* content = static_cast<const char*>(lpFileMap);