一个5G的文件好像不能用内存映射文件一次映射完成,MapViewOfFile最后一个参数dwNumberOfBytesToMap如果大于0x5fffffff在我的机器上就不成功,返回null。我的机器内存是1G大,虚拟内存设到4096MB最大。程序如下:
HANDLE hFile=CreateFile("D:\\DATA\\DATA200.dat",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
HANDLE hFileMapping=CreateFileMapping(hFile,
NULL,
PAGE_READONLY,
0x00000000, //这个高位是不是必须为0?
0xffffffff, //低位已经设到最大
NULL);
LPVOID pVoid=MapViewOfFile(hFileMapping,
FILE_MAP_READ,
0,0,
0x5fffffff);//最后这个参数我只能设到比这个小
否则函数返回null请问我的程序有问题吗?有没有办法一次映射5G甚至20G的大数据文件,请提供解决方案。诚恳请教。多谢。
HANDLE hFile=CreateFile("D:\\DATA\\DATA200.dat",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
HANDLE hFileMapping=CreateFileMapping(hFile,
NULL,
PAGE_READONLY,
0x00000000, //这个高位是不是必须为0?
0xffffffff, //低位已经设到最大
NULL);
LPVOID pVoid=MapViewOfFile(hFileMapping,
FILE_MAP_READ,
0,0,
0x5fffffff);//最后这个参数我只能设到比这个小
否则函数返回null请问我的程序有问题吗?有没有办法一次映射5G甚至20G的大数据文件,请提供解决方案。诚恳请教。多谢。
解决方案 »
- 请教一个问题,在view中拉动滚动条,CDC画得和该view的子窗口移动问题
- 用wininet 登录邮箱并保存登录后的网页
- (求助)当我想在类向导中看我自己编的一个类时,为何不可以看??
- 如何在程序里实现模拟网页中的表单提交功能.
- 菜鸟问题,不知道怎么回事,我的VC助手好像失效了,看代码基本上颜色都是黑的,oh ,my god,救救我!
- listview控件实时监控的问题!(带代码,解决200分)
- 互联网上如何利用ado查询数据库?
- 如何在桌面图标之下,背景之上作图?即在桌面作图,但不能覆盖图标
- 想给一个网页的<form>增加一个传送值,应该怎么设置啊?寻高手!
- 我非常喜欢编程(胜过女友),可我很笨学的很苦,进步很慢!我该怎麽办????
- 在SQL SERVER 中的bit 型变量,为什么丛数据库里取出来1 变成了 -1
- 向高手请教VC界面的问题
不好意思,那样的话,我就不知道了,我只在驱动里处理过那么大的文件,app没有试过to xhwu3721(granite)
什么是??我也不知道,请一起指教我们啊.对了,警告一下coolsun1858(),我可不是"兄"啊, 呵呵 :)
HANDLE hFile=CreateFile("D:\\DATA\\DATA200.dat",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
HANDLE hFileMapping=CreateFileMapping(hFile,
NULL,
PAGE_READONLY,
0x00000000,
0xB2D05E00, //这个值为3000000000大小,可以映射成功
NULL);
LPVOID pVoid=MapViewOfFile(hFileMapping,
FILE_MAP_READ,
0,0,
0); //最后这个参数为0表示全部映射上面那个大小
//但MapViewOfFile返回为NULL
//此时GetLastError查出为5,
//即出错原因Access is denied. 除非CreateFileMapping函数第五个参数小于0x59682F00(1.5G左右),MapViewOfFile
才能成功,请问为何出错为Access is denied.
我的机器内存是1G大,虚拟内存设到4096MB最大,操作系统为winserver 2003企业版,
操作系统可以管理32G内存。
谢谢大家。
去查一下<<Advanced Windows>>,看看吧
给一些DLL占用,所以实际可用的空间是远远少于2G的