18

指定したファイルから「N」バイトのみを読み取る方法は?

4

4 に答える 4

26

NSData を介してロードしたのと同様の方法でファイルの内容にランダムにアクセスしたいが、実際にはすべてをメモリに読み込まない場合は、メモリ マッピングを使用できます。そうすることは、ディスク上のファイルが仮想メモリのセクションとして扱われるようになり、通常の仮想メモリと同じようにページインおよびページアウトされることを意味します。

NSError * error = nil;
NSData * theData = [NSData dataWithContentsOfFile: thePath
                                          options: NSMappedRead
                                            error: &error];

ファイルシステムのエラーの詳細を取得する必要がない場合は、次を使用できます。

NSData * theData = [NSData dataWithContentsOfMappedFile: thePath];

次に、NSData の-getBytes:range:メソッドを使用して特定のデータを引き出すだけで、ファイルの関連部分のみが実際に永続ストレージから読み取られます。また、ページアウトされる資格もあります。

于 2009-06-01T20:02:05.647 に答える
24

-[NSFileHandle readDataOfLength:] .

NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
NSData *fileData = [handle readDataOfLength:N];
[handle closeFile];
于 2009-06-01T19:00:19.330 に答える
3

ファイル全体の読み取りを避けたい場合は、標準の CI/O 関数を使用できます。

#include <stdio.h>
...
FILE *file = fopen("the-file.dat", "rb");
if(file == NULL)
    ; // handle error
char theBuffer[1000];  // make sure this is big enough!!
size_t bytesRead = fread(theBuffer, 1, 1000, file);
if(bytesRead < 1000)
    ; // handle error
fclose(file);
于 2009-06-01T18:24:18.103 に答える
0

ファイルを開きます。

NSData *fileData = [NSData dataWithContentsOfFile:fileName];

必要なバイトを読み取ります。

int bytes[1000];
[fileData getBytes:bytes length:sizeof(int) * 1000];
于 2009-06-01T18:18:52.353 に答える