在C ++中读取大型映射的文本文件

时间:2019-01-15 03:45:57

标签: c++ file memory

我正在尝试显示大量文本(几乎不到1GB)。 我的代码:

HANDLE hFile; 
DWORD  dwBytesRead = 0;
OVERLAPPED ol = {0};
HANDLE m_hMapFile;


hFile = CreateFile(_T("test.txt"),               
                   GENERIC_WRITE | GENERIC_READ,          
                   0,       
                   NULL,                 
                   OPEN_EXISTING,         
                   FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 
                   NULL);                 

m_hMapFile = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);

LPVOID m_lpMapAddress = MapViewOfFile(m_hMapFile, FILE_MAP_ALL_ACCESS, 0, 
0, 0);

 }

现在已映射文本文件,如何显示其内容?我尝试了以下(较差)的实现:

    char *mappedData = (char*)m_lpMapAddress;
    for(int k = 0; k < strlen(mappedData); k++){ 
     cout<<mappedData [k];
   }

这显然不是显示文本内容的正确方法。有没有更有效的方法?

1 个答案:

答案 0 :(得分:0)

您可以尝试一次完成所有输出:

cout.write(mappedData, mappedSize);

但是请注意,无论如何将千兆字节的数据打印到控制台上都是不可能的。

控制台输出具有被用户读取的目的(编程分析是次要的事情)。您希望用户读取1 GB的数据吗?