【发布时间】:2018-01-23 04:58:41
【问题描述】:
我用CreateFile 打开了一个文件,并将该句柄传递给GetFileSizeEx 和SetFilePointerEx,它们都可以用来获取文件大小。然后我需要使用 ReadFile 或 ReadFileEx 将整个文件中的数据读入缓冲区。
我遇到的问题是GetFileSizeEx 和SetFilePointerEx 都将文件大小提供为 LARGE_INTEGER 类型,但 ReadFile 需要一个 DWORD 来表示要读取的字节数。有什么解决方法吗?
【问题讨论】:
-
与其将文件读入用户分配的缓冲区,不如考虑使用
CreateFileMapping()和MapViewOfFile()将内存指针映射到文件数据。CreateFileMapping()支持超过 4GB 的文件,在 64 位 Windows 上,MapViewOfFile()一次可以访问超过 4GB 的数据。但是,即使使用用户分配的缓冲区,您也确实不应该一次使用那么多顺序内存。有更好的方法可以使用更少量的内存来处理大量数据。 -
@remy 考虑将您的评论转化为答案。我想看看windows下的文件映射。