1. 程式人生 > >使用ReadFile程式崩潰的原因

使用ReadFile程式崩潰的原因

在使用這個函式的時候,很多人都不會特意的去看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

這個為0。其真實情況是在本機中寫程式碼測試執行的時候,不管你這個引數設不設定好像都沒有什麼問題。但是,當你將該程式放到別的電腦,或者虛擬機器執行的時候,問題就會出現了(我也不知道為什麼)。所以這就是這個函式崩潰的原因。引用空指標異常。

總結來說,多給它一個引數又不會死,怎麼安全怎麼來,不然真的是,軟體做好了,到別人電腦上執行突然蹦了,然後一臉懵逼,而且程式碼又多,一個不知道是什麼的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; }