簡體   English   中英

Win32 API的ReadFile函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM