2

我正在尝试读取包含数十亿个字符的文本文件。使用该功能 contentOfFile不起作用,因为我的应用程序因此而崩溃。

所以任何人都请将示例代码发送给我,以便我根据我的要求获得块。无论我需要哪个,我都只想得到那个。请尽可能尽快回复。

4

2 回答 2

15

我猜这是一个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];
于 2011-09-20T18:12:32.050 回答
1

一个好主意是查看 textedit 源代码,因为我以前用它打开过大量文件,应该有办法做到这一点。不知道为什么你的应用程序崩溃了。它应该没有问题。

于 2011-09-20T13:32:09.227 回答