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);//關閉句柄。 }