VC 20M左右大小的文本文件操作

来源:百度知道 编辑:UC知道 时间:2024/09/19 15:57:04
我的数据存在文本文件中,我的vc程序需要将它的内容一条一条读出,然后格式化之后存入数据库,我先用的是CFile类操作的,几十K的文件没问题,可是再大就卡死了,后来查到资料说CArchive类可以操作大型文件,于是换用CArchive操作可是还是不行,1M大小的文件就会是程序卡死,有没有高手给个解决办法,或者告诉我CArchive怎么正确操作才能操纵20M的文本文件,最好用代码来说明,谢谢
内存映射有些复杂了,有没有简单些的方法,比如说用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