如何从指定文件中仅读取“N”个字节?
问问题
10056 次
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 回答