2011-09-20 97 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

一个好主意是看文本编辑来源,因为我之前开大量的文件,与它应该有办法做到这一点。不知道为什么你的应用程序崩溃了。它不应该有问题。