使用ReadFile程式崩潰的原因
阿新 • • 發佈:2018-11-01
在使用這個函式的時候,很多人都不會特意的去看MSDN文件後面的Remarks解釋,所以可能有時候會出問題,而且不知道出在哪裡。
這個函式的其它引數就不詳細解釋了,就說說lpNumberOfBytesRead這個引數。
MSDN原文:When a read operation reaches the end of a file, this function returns TRUE and sets * lpNumberOfBytesRead to zero.
這個字面上意思可能會被翻譯成,當都操作到達檔案尾的時候,返回TRUE,並且設定 *lpNumberOfBytesRead
總結來說,多給它一個引數又不會死,怎麼安全怎麼來,不然真的是,軟體做好了,到別人電腦上執行突然蹦了,然後一臉懵逼,而且程式碼又多,一個不知道是什麼的BUG的BUG,真的很絕望,要除錯很久才能慢慢的測試出來是哪裡錯了。所以啊,API的使用一定怎麼安全怎麼來!!!
下面貼出讀檔案的安全程式碼:
int ReadF(_In_ char* lpPath,_Out_ char * lpBuf, _In_ DWORD bufSize, _Out_ LPDWORD toReadSize)
{
HANDLE hFile = CreateFile(lpPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
return GetLastError();
if (!ReadFile(hFile, lpBuf, bufSize, toReadSize, NULL))
return GetLastError();
return TRUE;
}