我正在尝试阅读包含数十亿字符的文本文件。使用该功能
contentOfFile
无效,因为我的应用程序因此而崩溃。
所以任何人都可以给我发送示例代码,以便根据我的要求获得大块。无论我需要什么,我只想获得那个。 请尽快回复。
答案 0 :(得分:14)
我猜这是一款iOS应用。在这种情况下,您可能通过调用contentsOfFile:
来达到内存限制,因为该方法试图将文件的全部内容读入变量(内存)。请记住,在iOS上你的应用程序必须运行良好,如果它决定消耗太多内存,那么监视程序进程将终止你的应用程序以防止设备重启(这是因为没有磁盘可以在iOS设备上交换)。 / p>
你看过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];
答案 1 :(得分:1)
一个好主意是查看textedit源代码,因为我之前已经用它打开了大量文件,应该有办法做到这一点。不知道为什么你的应用程序崩溃了。它不应该有问题。