我試圖讀取包含數十億個字符的文本文件。使用功能 contentOfFile
不工作,我的應用程序獲得,由於它墜毀。如何從一個巨大的文本文件中讀取文本塊?
所以有人請給我的樣本代碼,這樣我根據我requirement.Whichever我需要我想只得到一個拿到塊。 請儘快回覆。
我試圖讀取包含數十億個字符的文本文件。使用功能 contentOfFile
不工作,我的應用程序獲得,由於它墜毀。如何從一個巨大的文本文件中讀取文本塊?
所以有人請給我的樣本代碼,這樣我根據我requirement.Whichever我需要我想只得到一個拿到塊。 請儘快回覆。
我猜這是一個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];
一個好主意是看文本編輯來源,因爲我之前開大量的文件,與它應該有辦法做到這一點。不知道爲什麼你的應用程序崩潰了。它不應該有問題。
感謝您的答覆,但你知道,當我增加'值UINT64偏移= 0;'從「0」到任何上面的整數,即10,然後它在一些奇怪的校正器,這不是英文字母 – rptwsthi
迴應請檢查這個問題,在這裏首先st2 =是所需的響應,然後我已經''offset'從0到100' – rptwsthi
http://stackoverflow.com/questions/7487761/problem-in-reading-from-file-recursively – rptwsthi