簡體   English   中英

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

[英]Reading large mapped text file in C++

我正在嘗試顯示大量文本(幾乎不到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];
   }

這顯然不是顯示文本內容的正確方法。 有沒有更有效的方法?

您可以嘗試一次完成所有輸出:

cout.write(mappedData, mappedSize);

但是請注意,無論如何,將千兆字節的數據打印到控制台都不是有效的方法。

控制台輸出的目的是被用戶讀取(編程分析是次要的事情)。 您希望用戶讀取1 GB的數據嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM