2016-11-30 40 views
-1

我有一個大的文件(500MB),我知道如何讀與ReadFile函數如何閱讀與ReadFile函數大文件

這個文件,但我想100MB

讀取100MB我的意思是我想要在while循環中讀取文件,在第一個循環中讀取第一個100mb文件,第二次讀取第二個100mb(從101到200),...

例如我有一個文件包含abdcefghijklmnopqrstuvwxyz現在我想先看abcd,然後看efgh,th恩ijkl等等...

感謝您的幫助

+1

500毫克不是*那*大... –

+0

@FrédéricHamidi:你在開玩笑嗎? 500毫克的字節就像yottabytes! – AndyG

+0

@AndyG,你在考慮新技術。基於老派拼盤的硬盤的字節數爲500毫克,出乎意料的低:) –

回答

-2

據我瞭解,你想讀的塊文件塊?

在短邏輯是:

get the size of the file or read till ReadFile return error 
while (a chunk larger than zero could be read) 
{ 
    write chunk to output 
} 

換句話說:最簡單的方法是先獲取文件大小:

HANDLE hFile = CreateFile("c:\\myFile", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); 
DWORD dwFileSize = GetFileSize(hFile, NULL); 

現在定義循環。讀取最多1024字節的塊。當然,你可以使用更大的緩衝區。

BYTE buffer[1024]; 
while(read is less than remain) { 
    ReadFile(hFile, buffer, sizeof(buffer), &dwRead, NULL) 
// append what you just read to some global buffer 
} 

在谷歌搜索「以塊形式讀取文件」,你會發現大量的例子。

+0

謝謝,但是用這個代碼我可以讀取只有1024個字節的文件,第二個1024字節怎麼樣? – joe

+0

這是一個僞代碼。它顯示你只是生如何做到這一點,並且它會讀取文件直到結束,例如多次調用ReadFile – Kiko

+1

你不需要事先獲得文件大小,並且如果文件增長,該技術將失敗'ReadFile( )'提供文件狀態結束,這就是你所需要的。 – EJP