ReadFile()-----同步
ReadFile:从文件指针指向的位置开始将数据读出到一个文件中, 且支持同步和异步操作。与fread函数相比,这个函数要明显灵活的多。该函数能够操作通信设备、管道、套接字以及邮槽。
函数原型:
BOOL ReadFile
(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
参数说明:
HANDLE hFile 文件的句柄
需要读入数据的文件指针,这个指针指向的文件必须是GENERIC_READ 访问属性的文件。
LPVOID lpBuffer 缓冲区
用于保存读入数据的一个缓冲区
DWORD nNumberOfBytesToRead 字节数
指定要读取的字节数。
LPDWORD lpNumberOfBytesRead 指向实际读取字节数的指针
指向一个DWORD类型变量的指针,用来接收读取的字节数。如果下一个参数为NULL,那么一定要传入这个参数。
LPOVERLAPPED lpOverlapped 结构体指针
文件打开时指定了FILE_FLAG_OVERLAPPED(FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作),那么必须,用这个参数引用一个特殊的结构。
该结构定义了一次异步读取操作。否则,应将这个参数设为NULL
代码: void ReadFile(char *str) { HANDLE hFile; hFile = ::CreateFile(str, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //用这个函数比OpenFile好 if(hFile == INVALID_HANDLE_VALUE) { MessageBox(NULL, "打开文件失败", "Error", MB_OK); CloseHandle((hFile); //一定注意在函数退出之前对句柄进行释放。 return; } DWORD dwFileSize = GetFileSize(hFile , NULL); char *buffer = newchar[dwFileSize+1]; //最后一位为'\0',C-Style字符串的结束符。 DWORD dwReadSize; ReadFile(hFile , buffer, dwFileSize, &dwReadSize, NULL); buffer[dwFileSize] = 0; MessageBox(NULL, buffer, "BufferSize", MB_OK); //善后工作 delete[]buffer; //注意是delete[]而不是delete CloseHandle(hFile);//关闭句柄。 }