VC 20M左右大小的文本文件操作
来源:百度知道 编辑:UC知道 时间:2024/09/19 15:57:04
内存映射有些复杂了,有没有简单些的方法,比如说用CFile或CArchive,如果用内存映射的话最好给我个例子,本人是新手,感觉做内存映射有些困难,最好详细些,谢谢
再加50分,如果用内存映射的话能再详细些吗?
为什么卡死了?
我读的文件有2G多都没有问题,起初用的是CFile,现在用的是C语言的open和fopen,都没有问题。你换一下这两个函数看看。
不是读文件问题吧?CFile读1G文件文件是没有问题的,是不是你的程序有问题
在这里用内存映射有点“大材小用”了,没必要的
可以通过内存映射的方式
内存映射是很好的解决办法,如果实在不行,你就用GlobleAlloc()来解决,自己去查这个函数。最好对内存有点了解。花个几十分种去读读应用程序对内存空间的使用,很有帮助的。
1)映射文件开头的映像。
2)对该映像进行访问。
3)取消此映像
4)映射一个从文件中的一个更深的位移开始的新映像。
5)重复步骤2,直到访问完全部的文件数据。
下面给出一段根据此描述而写出的对大于4GB的文件的处理代码:
// 选择文件
CFileDialog fileDlg(TRUE, "*.txt", "*.txt", NULL, "文本文件 (*.txt)|*.txt||", this);
fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST;
fileDlg.m_ofn.lpstrTitle = "通过内存映射文件读取数据";
if (fileDlg.DoModal() == IDOK)
{
// 创建文件对象
HANDLE hFile = CreateFile(fileDlg.GetPathName(), GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
TRACE("创建文件对象失败,错误代码:%d