Чтение большого сопоставленного текстового файла в C ++ - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь отобразить большой объем текста (чуть менее 1 ГБ). Мой код:

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 голосов
/ 15 января 2019

Вы можете попробовать сделать все свои выходные данные сразу:

cout.write(mappedData, mappedSize);

Но учтите, что печать гигабайта данных на консоль вряд ли будет эффективной в любом случае.

Вывод на консоль имеет целью быть прочитанным пользователем (программный разбор является второстепенным). Ожидаете ли вы, что пользователь прочитает 1 ГБ данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...