Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Win32 API中的ReadFile函数_C++_Windows_Winapi_Visual C++ - Fatal编程技术网

C++ 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, _

关于Win32 API中的ReadFile函数,我有两个问题。首先,鉴于

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。有许多商业应用程序的大小更高。