0

ファイル全体を読み取らずに、ファイルの最初の8バイト程度を取得したい。NSDataを使用してデータなどを操作していますが、最初の2つを抽出するためだけに200キロバイトのファイルを読み取らなければならない場合があるため、過度のファイル読み取りと書き込みでアプリケーションの速度を低下させたくありません。ファイルからのデータのバイト。iOS SDKを使用してXcodeですべてを読み取りまたは上書きせずに、ファイルの一部のみを読み取りまたは書き込みする方法はありますか?

私が使用しているファイルシステムは、NSFileManagerクラスからアクセスできるデフォルトのファイルシステムです(他のiOSファイルシステムについては知りません)。

4

2 に答える 2

3

標準 C ファイル API (FILE* または int ファイル記述子) を使用します。注意点は、文字列パスを正しい char* ファイル パスに適切に変換する必要があることです。また、完了したらファイルを閉じることを忘れないでください。NSData のカテゴリを考えてみましょう。このようなものです...

+ (id)dataWithContentsOfFile:(NSString *)filePath numBytes:(NSUInteger)numBytes
{
    void *bytes = malloc(numBytes);
    NSData *result = [NSData dataWithBytesNoCopy:bytes length:numBytes];
    char const *path = [[NSFileManager defaultManager] fileSystemRepresentationWithPath:filePath];
    int fd;
    if ((fd = open(path, O_RDONLY)) < 0 || read(fd, bytes, numBytes) != numBytes) {
        result = nil;
    }
    close(fd);
    return result;
}
于 2012-04-15T20:27:51.930 に答える