2011-09-20 120 views
2

我試圖讀取包含數十億個字符的文本文件。使用功能 contentOfFile不工作,我的應用程序獲得,由於它墜毀。如何從一個巨大的文本文件中讀取文本塊?

所以有人請給我的樣本代碼,這樣我根據我requirement.Whichever我需要我想只得到一個拿到塊。 請儘快回覆。

回答

13

我猜這是一個iOS應用。在這種情況下,你很可能通過調用contentsOfFile:因爲該方法試圖讀取該文件的全部內容複製到一個變量(內存)不碰到內存限制。請記住,在iOS上,您的應用程序必須運行良好,如果它決定佔用過多的內存,那麼看門狗進程會終止您的應用程序以避免重新啓動設備(這是因爲在iOS設備上沒有交換磁盤)。

你看過NSFileHandle嗎? NSFileHandle支持在文本內尋找文件。隨着一些簡單的重複,你可以使用下面的方法來在文件中搜尋和讀取數據塊:

- (NSData *)readDataOfLength:(NSUInteger)length; 
- (void)seekToFileOffset:(unsigned long long)offset; 

它可能是這個樣子。假設pathToFile是包含路徑文本文件的NSString在讀

uint64 offset = 0; 
uint32 chunkSize = 1024;  //Read 1KB chunks. 
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:pathToFile]; 
NSData *data = [handle readDataOfLength:chunkSize]; 

while ([data length] > 0) 
{ 
    //Make sure for the next line you choose the appropriate string encoding. 
    NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; 

    /* PERFORM STRING PROCESSING HERE */ 

    /* END STRING PROCESSING */ 
    offset += [data length]; 

    [handle seekToFileOffset:offset]; 
    data = [handle readDataOfLength:chunkSize]; 
} 

[handle closeFile]; 
+0

感謝您的答覆,但你知道,當我增加'值UINT64偏移= 0;'從「0」到任何上面的整數,即10,然後它在一些奇怪的校正器,這不是英文字母 – rptwsthi

+0

迴應請檢查這個問題,在這裏首先st2 =是所需的響應,然後我已經''offset'從0到100' – rptwsthi

+0

http://stackoverflow.com/questions/7487761/problem-in-reading-from-file-recursively – rptwsthi

1

一個好主意是看文本編輯來源,因爲我之前開大量的文件,與它應該有辦法做到這一點。不知道爲什麼你的應用程序崩潰了。它不應該有問題。

相關問題