如何读写大于5G的文件?

曾永红_ 2004-08-03 08:50:41
在NTFS格式下的文件可以大于5GB,但是ReadFileEx(WriteFileEx)函数输入的参数最多为4GB(DWORD只要4GB的寻址空间),怎样才能用ReadFileEx(WriteFileEx)来读写NTFS格式下大于5GB的文件呢?
...全文
198 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
snowx 2004-08-03
不行就试试分段
回复
an_bachelor 2004-08-03
用古典的

FILE* fp = fopen("filename", "w+b");
for (unsigned long n =0, n2 = 0; ++n < 3)
while (n2++ < 0xffffffff)
{
//fread()/fwrite()
}

可不可以呢?个人认为ntfs文件可以大于5g的特性应该由windows支持 变量溢出的问题可以用变通的方法。
回复
DentistryDoctor 2004-08-03
你需要在CreateFile的第6参数组合FILE_FLAG_NO_BUFFERING|FILE_FLAG_SEQUENTIAL_SCAN
HANDLE hFile = CreateFile( tempFileName, GENERIC_WRITE|GENERIC_READ,0, NULL, CREATE_NEW,FILE_FLAG_NO_BUFFERING|FILE_FLAG_SEQUENTIAL_SCAN, NULL );
请仔细阅读MSDN中关于CreateFile的帮助。
回复
gunj 2004-08-03
详细的请参考《Windows核心编程》第17章,内存映射文件
回复
aspnetwuxueyou 2004-08-03
You can also use Address Windowing Extensions (AWE)
回复
aspnetwuxueyou 2004-08-03
CreateFileMapping创建一个section object,
然后把section object的一部分映射到内存MapViewOfFile

section object应用很多的
The executive uses sections to load executable images into memory, and the cache manager uses them to access data in a cached file. You can also use section objects to map a file into a process address space. The file can then be accessed as a large array by mapping different views of the section object and reading or writing to memory rather than to the file (an activity called mapped file I/O). When the program accesses an invalid page (one not in physical memory), a page fault occurs and the memory manager automatically brings the page into memory from the mapped file. If the application modifies the page, the memory manager writes the changes back to the file during its normal paging operations (or the application can flush a view by using the Win32 FlushViewOfFile function).

回复
zhuzhufox 2004-08-03
CreateFileMapping
回复
esri 2004-08-03
使用内存映射文件.
回复
huwei001982 2004-08-03
关于NTFS格式的大文件, M$应该会有专门的 API 才对

好像 WIN32 裡面單個文件最大就只有 2 G
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-08-03 08:50
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……