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

私は以前に大量のファイルを開いたことがあり、それを行う方法があるはずなので、テキストエディットのソースを調べることをお勧めします。ただし、アプリがクラッシュする理由はわかりません。問題はないはずです。

于 2011-09-20T13:32:09.227 に答える