我试图读取包含数十亿个字符的文本文件。使用功能 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