2013-09-26 44 views
1

我寫過一個程序,它從一個文件中讀取文本並將其複製到一個新文件中。使用while循環和ReadFile/Writefile函數,我的程序可以工作......但是我的程序不會停止運行,除非我強制停止它。我在猜測,我沒有正確地關閉手柄,或者我的while循環可能會設置錯誤。一旦我強制停止我的程序,文件被成功地複製到一個新名稱的新位置。win32使用while循環與C中的ReadFile/WriteFile從一個程序寫入新的程序

int n = 0; 
while(n=ReadFile(hFileSource, buffer, 23, &dwBytesRead, NULL)){ 
    WriteFile(hFileNew, buffer, dwBytesRead, &dwBytesWritten, NULL); 
}  

CloseHandle(hFileSource); 
CloseHandle(hFileNew); 

return 0; 

回答

3

您沒有正確測試文件結束。 ReadFile不會爲EOF返回失敗,它會返回成功,但會讀取0個字節。要正確檢查EOF:

while (ReadFile(hFileSource, buffer, 23, &dwBytesRead, NULL)) 
{ 
    if (dwBytesRead == 0) 
     break; 
    // write data etc 
} 

是否有任何理由一次只能讀/寫23個字節?這將是相當低效的。

+2

我會選擇將循環改爲do/while並在循環內移動ReadFile()調用,以便它可以對ReadFile()進行錯誤處理並報告任何讀取錯誤並丟棄不完整的目標文件,如果源文件無法正確讀取文件。否則,你必須在循環結束後檢查錯誤,但是你不知道它是否是錯誤的ReadFile()或WriteFile()。 –