Winapi 如何一次将超过4GB的数据加载到内存缓冲区?

Winapi 如何一次将超过4GB的数据加载到内存缓冲区?,winapi,readfile,Winapi,Readfile,如何使用单个WinAPI调用一次性将超过4GB的文件加载到内存缓冲区?WinAPI ReadFile方法最多只支持4294967295字节 注意:为了让在网络搜索中偶然发现这个问题的人明白:这通常是一个非常糟糕的主意。我们考虑了一个非常特殊的场景,但没有考虑。不过,在理论层面上,我们仍然感兴趣的是,这是否可能以及如何实现。一次调用Win32 API函数是无法做到这一点的。多次调用ReadFile,读取大小不超过4GB的块,直到您读取了所有需要读取的块 如果它有助于您进行单个函数调用,请将此循环封

如何使用单个WinAPI调用一次性将超过4GB的文件加载到内存缓冲区?WinAPI ReadFile方法最多只支持4294967295字节


注意:为了让在网络搜索中偶然发现这个问题的人明白:这通常是一个非常糟糕的主意。我们考虑了一个非常特殊的场景,但没有考虑。不过,在理论层面上,我们仍然感兴趣的是,这是否可能以及如何实现。

一次调用Win32 API函数是无法做到这一点的。多次调用ReadFile,读取大小不超过4GB的块,直到您读取了所有需要读取的块


如果它有助于您进行单个函数调用,请将此循环封装在您定义的函数中,并调用该函数

为了让他们更清楚,你不能使用标准的内存分配函数来分配这么大的缓冲区。我对下行投票感到有点困惑,我能做些什么来改进这个问题吗?仅从StackOverflow的理论角度提出有趣的问题是否是一种不好的做法?@HansPassant在64位系统上说,64位进程可以使用标准内存分配大于4 GB的缓冲区functions@D.R.你考虑过通过CreateFileMapping和MapViewOfFile使用内存映射而不是使用ReadFile吗?@RemyLebeau:是的,请注意:我的问题只是理论性的。这取决于你的意思。阅读这个文件需要时间,所以我对这个短语的理解从来就不是这样的。更清楚的是,如果问到是否有一个Win32 API可以通过一次调用读取那么多。我已经更新了我的问题,让它更清楚,希望你重新考虑你的否决票,谢谢。你不知道是谁投的票。不管怎样,你有你的答案。