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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM