词条 | ReadFile |
释义 | 函数原型BOOL ReadFile( HANDLE hFile, //文件的句柄 LPVOID lpBuffer, //用于保存读入数据的一个缓冲区 DWORD nNumberOfBytesToRead, //要读入的字节数 LPDWORD lpNumberOfBytesRead, //指向实际读取字节数的指针 LPOVERLAPPED lpOverlapped //如文件打开时指定了FILE_FLAG_OVERLAPPED,那么必须,用这个参数引用一个特殊的结构。该结构定义了一次异步读取操作。否则,应将这个参数设为NULL ); 功能说明从文件指针指向的位置开始将数据读出到一个文件中, 且支持同步和异步操作, 如果文件打开方式没有指明FILE_FLAG_OVERLAPPED的话,当程序调用成功时,它将实际读出文件的字节数保存到lpNumberOfBytesRead指明的地址空间中。 如果文件要交互使用的话,当函数调用完毕时要记得调整文件指针。 从文件中读出数据。与lread函数相比,这个函数要明显灵活的多。该函数能够操作通信设备、管道、套接字以及邮槽。 参数说明HANDLE hFile, 需要读入数据的文件指针,这个指针指向的文件必须是GENERIC_READaccess 访问属性的文件。 LPOVERLAPPED lpOverlapped OVERLAPPED结构体指针,如果文件是以FILE_FLAG_OVERLAPPED方式打开的话,那么这个指针就不能为NULL。 返回值调用成功,返回非0 调用不成功,返回为0 会设置GetLastError。如启动的是一次异步读操作,则函数会返回零值,并将ERROR_IO_PENDING设置成GetLastError的结果。如结果不是零值,但读入的字节数小于nNumberOfBytesToRead参数指定的值,表明早已抵达了文件的结尾。 应用实例void ReadFile(char* str) { HANDLE pfile; pfile = ::CreateFile(str,GENERIC_READ,0,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_DELETE_ON_CLOSE,NULL); // 用这个函数比OpenFile好 if ( pfile == INVALID_HANDLE_VALUE) { MessageBox( NULL,"打开文件失败" ,"Error",MB_OK); CloseHandle(pfile); // 一定注意在函数退出之前对句柄进行释放。 return; } DWORD filesize=GetFileSize(pfile,NULL); char* buffer=new char[filesize+1]; // 最后一位为 '/0',C-Style 字符串的结束符。 DWORD readsize; ReadFile(pfile,buffer,filesize,&readsize,NULL); buffer[filesize]=0; MessageBox(NULL,buffer,"Buffer Size",MB_OK); // 善后工作 delete[] buffer; // 注意是delete[] 而不是 delete CloseHandle(pfile); // 关闭句柄。 } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。