从Cocoa中的文件中只读“N”个字节

时间:2009-06-01 18:14:18

标签: objective-c cocoa nsdata

如何从指定文件中只读取“N”个字节?

4 个答案:

答案 0 :(得分:25)

如果您希望以类似于通过NSData加载文件内容的方式随机访问文件内容,但实际上没有将所有内容读入内存,则可以使用内存映射。这样做意味着磁盘上的文件被视为虚拟内存的一部分,并且将像常规虚拟内存一样被分页输入和输出。

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

如果您不关心获取文件系统错误的详细信息,可以使用:

NSData * theData = [NSData dataWithContentsOfMappedFile: thePath];

然后你只需使用NSData的-getBytes:range:方法来提取特定的数据,实际上只能从永久存储中读取文件的相关部分;他们也有资格被分页。

答案 1 :(得分:23)

-[NSFileHandle readDataOfLength:]

NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
NSData *fileData = [handle readDataOfLength:N];
[handle closeFile];

答案 2 :(得分:2)

如果您想避免读取整个文件,可以使用标准的C I / 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);

答案 3 :(得分:0)

打开文件:

NSData *fileData = [NSData dataWithContentsOfFile:fileName];

读取你想要的字节:

int bytes[1000];
[fileData getBytes:bytes length:sizeof(int) * 1000];