我用的MFC里面的CMemFile类来实现: CFile file(strFileName,CFile::modeRead);
CMemFile memFile;
BYTE* pBuf;
DWORD iLen=file.GetLength();
pBuf =(BYTE*)new char[iLen+1];
memFile.Attach(pBuf, iLen, 0);
file.ReadHuge(pBuf,iLen);
memFile.WriteHuge(pBuf,iLen);//将文件内存与memFile想关联./*现在我要对memFile进行扫描,一行一行的扫描(读取),怎么办?????????*/
file.Close();
delete[] pBuf;

解决方案 »

  1.   

    那还不如直接读取txt,根据\r\n来找到一行结束的位置来读取一行的数据
      

  2.   

    这里的CMemFile是多余的,就相当于把数据在内存中又复制了一遍,除了浪费内存之外没实际意义。
      

  3.   

    因为我的要读的文件全部大于200MB,所以用到CMemFile读取的速度会快很多
      

  4.   

    读取的文件是STL格式,要求达到200多M,如果不用CMemFile类,读取一个100多MB的要1分多钟。请各位帮帮忙
      

  5.   

    你读取文件应该是顺序读取啊, 那样就算几个G也能读的, 因为没有一次性读入内存的,  一次读一点 如果你一点要一次性读入内存, 可以使用虚拟内存m_pBuffer = (LPBYTE)::VirtualAlloc( NULL, 文件大小, MEM_COMMIT, PAGE_READWRITE);然后把文件读取到这个虚拟内存中, 不过真的不需要, 直接的文件操作就够了
      

  6.   

    ReadFile()
    每次读固定的长度
      

  7.   

    我现在想到一个方法,就是自己再派生一个类A,类A继承于CMemFile同进也继承于CStdioFile
      

  8.   

    每次读一段数据(例如1MB)到缓冲区里面,然后再处理就可以了,CMemFile是多余的,另外也可以有用CreateFileMapping的方式,把整个文件映射,然后当作字符串来处理。