假设我想以 10MB 的块下载 50MB 的文件。在之前的会话中,我下载了 8MB,所以甚至没有完成一个块。我想验证文件中有多少字节在从 x 到 x 字节的范围内。所以从 0 到 10485759 字节读取数据会给我这个 8MB 而不是像下面的函数那样的 10MB。有什么建议吗?
我将此方法用于不同的东西,但这将始终返回块的完整大小:
+ (NSData *)dataWithContentsOfFile:(NSString *)path withStartOffset:(off_t)startOffset andEndOffset:(off_t)endOffset
{
FILE *file = fopen([path UTF8String], "rb");
if(file == NULL)
return nil;
uint64_t size = (endOffset - startOffset) + 1;
void *data = malloc(size); // check for NULL!
fseeko(file, startOffset, SEEK_SET);
fread(data, 1, size, file); // check return value, in case read was short!
fclose(file);
// NSData takes ownership and will call free(data) when it's released
return [NSData dataWithBytesNoCopy:data length:size];
}