這應該工作,假設文件不是很大,它在dataWithContentsOfFile:filename
怪胎。 iOS可能會在後臺進行緩存,但我不知道。
-(NSUInteger)splitFile:(NSString *)filename chunkSize:(NSUInteger)chunkSize {
NSUInteger chunksWritten;
NSFileManager *fm = [[[NSFileManager alloc] init] autorelease];
NSData *fileData = [NSData dataWithContentsOfFile:filename];
NSString *newFileName;
NSRange dataRange;
for (chunksWritten = 0; chunksWritten * chunkSize < [fileData length]; chunksWritten++) {
newFileName = [filename stringByAppendingPathExtension:[NSString stringWithFormat:@"%03d", chunksWritten]];
dataRange = NSMakeRange(chunksWritten * chunkSize, MIN(chunkSize, [fileData length] - chunksWritten * chunkSize));
if (![fm createFileAtPath:newFileName contents:[fileData subdataWithRange:dataRange] attributes:nil]) {
NSLog(@"Error writing chunk #%d", chunksWritten);
break;
}
}
return chunksWritten;
}
錯誤檢查顯然需要更強大。
這很酷。我要寫測試代碼! –
太完美了!它起到了魅力的作用。 iOS做後臺工作,我已經嘗試266MB文件分割每個32 MB,並完美的工作!謝謝。 –
這是否有任何文件大小限制?我認爲'dataWithContentsOfFile'返回的數據將存入內存,並且會有限制。 –