0

我想在不读取整个文件的情况下获取文件的前 8 个字节左右。我正在使用 NSData 对数据等进行操作,但我不想通过过多的文件读取和写入来减慢我的应用程序的速度,因为在某些情况下,我必须读取一个 200 KB 的文件才能提取前 2文件中的数据字节。有没有办法只读取或写入文件的一部分而不用 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 回答
3

您可以利用更高级别的NSFileHandle课程。该类NSFileHandle是文件描述符的面向对象的包装器。您使用文件句柄对象来访问与文件、套接字、管道和设备相关的数据。对于文件,您可以在文件中读取、写入和查找。对于套接字、管道和设备,您可以使用文件句柄对象来监控设备并异步处理数据。

- (NSData *)readDataOfLength:(NSUInteger)length

您可以在官方文档NSFileHandle 类参考中获得更多信息

于 2013-06-17T21:11:49.070 回答