我希望在不读取整个文件的情况下获取文件的前8个字节左右。我正在使用NSData来处理数据等等,但是我不想通过过多的文件读取和写入来减慢我的应用程序,因为在某些情况下我不得不读取一个200千字节的文件来提取前两个来自文件的数据字节。有没有办法只读取或写入文件的一部分,而无需使用iOS SDK读取或覆盖Xcode中的所有内容?
我正在使用的文件系统只是可以通过NSFileManager类访问的默认文件系统(我不知道任何其他iOS文件系统)。
答案 0 :(得分: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;
}
答案 1 :(得分:2)
您可以利用更高级别的NSFileHandle
课程。 NSFileHandle
类是文件描述符的面向对象的包装器。您使用文件句柄对象来访问与文件,套接字,管道和设备关联的数据。对于文件,您可以在文件中进行读取,写入和搜索。对于套接字,管道和设备,您可以使用文件句柄对象来监视设备并异步处理数据。
- (NSData *)readDataOfLength:(NSUInteger)length
您可以在官方文档NSFileHandle Class Reference
中获取更多信息