C++ Win32 API中的ReadFile函数
关于Win32 API中的ReadFile函数,我有两个问题。首先,鉴于C++ Win32 API中的ReadFile函数,c++,windows,winapi,visual-c++,C++,Windows,Winapi,Visual C++,关于Win32 API中的ReadFile函数,我有两个问题。首先,鉴于 BOOL WINAPI ReadFile( _In_ HANDLE hFile, _Out_ LPVOID lpBuffer, _In_ DWORD nNumberOfBytesToRead, _
BOOL WINAPI ReadFile(
_In_ HANDLE hFile,
_Out_ LPVOID lpBuffer,
_In_ DWORD nNumberOfBytesToRead,
_Out_opt_ LPDWORD lpNumberOfBytesRead,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);
第三个和第四个参数为DWORD类型,最多可容纳1^32个参数,且不会溢出。这是否意味着ReadFile一次只能读取少于1^32字节数据的文件?如果这是真的,我想读取一个大于1^32的文件,我将把ReadFile放入这样的循环中
char buffer[1<<32];
while(!EOF){
ReadFIle(filename,buffer,1^32,bytesout,NULL);
SomeFunctionToExtractDataFromBuffer(buffer)
}
char缓冲区[1]
第三个和第四个参数为DWORD类型,可以保存
最大值为1^32,无溢出。这是否意味着ReadFile只能
是否读取一次包含少于1^32字节数据的文件
不可以。这意味着它一次最多只能读取2^32个字节。没有人会阻止您多次调用ReadFile
来读取所需的总字节数(每次读取都会提高速度,因此它将从上一次读取停止的点开始读取)
假设循环在每次迭代中都会覆盖缓冲区
为了让这个设计工作,ReadFile需要记住在哪里
文件中发生的上一次读取是真的吗
是的,操作系统会为每个打开的文件记住这一点(参见上面的文件指针链接)
在这个问题上,我应该提到,如果您计划4GB读取,那么您很可能是做错了什么。无论您的数据的性质如何,您当然可以将其分为更小的块进行处理,这将有助于避免遇到各种问题,例如可用内存
第三个和第四个参数为DWORD类型,可以保存
最大值为1^32,无溢出。这是否意味着ReadFile只能
是否读取一次包含少于1^32字节数据的文件
不可以。这意味着它一次最多只能读取2^32个字节。没有人会阻止您多次调用ReadFile
来读取所需的总字节数(每次读取都会提高速度,因此它将从上一次读取停止的点开始读取)
假设循环在每次迭代中都会覆盖缓冲区
为了让这个设计工作,ReadFile需要记住在哪里
文件中发生的上一次读取是真的吗
是的,操作系统会为每个打开的文件记住这一点(参见上面的文件指针链接)
在这个问题上,我应该提到,如果您计划4GB读取,那么您很可能是做错了什么。无论您的数据的性质如何,您当然可以将其分为更小的块进行处理,这将有助于避免遇到各种问题,例如可用内存。很高兴知道,他们确实应该指出这一点在他们的文档中。事实上,我正在以小块的方式处理它,就像一次处理多个MB。只是好奇ReadFile函数文件指针,如果它记得它在哪里的话。感谢你,他们真的应该在他们的文档中指出这一点。实际上,我正在以小块的方式处理它,就像一次处理多个MB。只是好奇而已关于ReadFile函数文件指针,如果它记得它在哪里的话。再次感谢。请修改这个问题的标题,这样它将对本网站的未来访问者有用。否则它将有被关闭的风险,因为它太本地化了。没有理由假设DWORD的大小是32。有许多商业应用程序的大小很高呃。请修改这个问题的标题,这样它将对本网站的未来访问者有用。否则它将有被关闭的风险,因为它太本地化了。没有理由假设DWORD的大小是32。有许多商业应用程序的大小更高。