[英]ReadFile function from Win32 API
我有兩個關於Win32 API中ReadFile函數的問題。 首先,鑒於
BOOL WINAPI ReadFile(
_In_ HANDLE hFile,
_Out_ LPVOID lpBuffer,
_In_ DWORD nNumberOfBytesToRead,
_Out_opt_ LPDWORD lpNumberOfBytesRead,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);
第三個和第四個參數的類型為DWORD,最大可容納1 ^ 32,而不會溢出。 這是否意味着ReadFile一次只能讀取少於1 ^ 32字節數據的文件? 如果是這樣,我想讀取大於1 ^ 32的文件,則將ReadFile放入這樣的循環中
char buffer[1<<32];
while(!EOF){
ReadFIle(filename,buffer,1^32,bytesout,NULL);
SomeFunctionToExtractDataFromBuffer(buffer)
}
假設循環趨向於在每次迭代時覆蓋緩沖區,為了使該設計正常工作,ReadFile需要記住文件中先前發生讀取的位置,這是真的嗎? 或有其他方法可以實現這一目標。 非常感謝
第三個和第四個參數的類型為DWORD,最大可容納1 ^ 32,而不會溢出。 這是否意味着ReadFile一次只能讀取少於1 ^ 32字節數據的文件?
否。這意味着它一次只能讀取2 ^ 32字節。 沒有人會阻止您多次調用ReadFile
來讀取所需的總數字節(每次讀取都會使文件指針前進,因此它將從上一個讀取停止的位置開始讀取)。
假設循環趨向於在每次迭代時覆蓋緩沖區,為了使該設計正常工作,ReadFile需要記住文件中先前發生讀取的位置,這是真的嗎?
是的,操作系統會記住每個打開的文件(請參見上面的文件指針鏈接)。
在主題上,我應該提到,如果您計划4GB讀取,那么您很可能做錯了什么。 無論數據的本質是什么,您都可以肯定地以較小的塊進行處理,這將有助於避免遇到諸如可用內存等各種問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.