2011-12-01 92 views
2

我正在尋找將二進制文件拆分(分割)爲多個文件的庫。 如果有一個名爲iOS中的臨時文件夾 「test.m4v」 文件的大小爲20MB(NSTemporaryDirectory()), 我想那一剎那到圖書館的iOS分裂巨大的二進制文件的特定大小?

  • test.m4v.000(7MB)
  • 測試.m4v.001(7MB)
  • test.m4v.002(6MB)

類似的東西(它不必是 '7MB',也可以成爲這樣5MB)

like command line split command. , 一世不要以爲我們可以在iOS應用內調用這個命令。

有沒有iOS(免費/付費)庫來做到這一點?我可能只需要低級訪問並寫入它,但我懶得這樣做;)

回答

3

這應該工作,假設文件不是很大,它在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; 
} 

錯誤檢查顯然需要更強大。

+0

這很酷。我要寫測試代碼! –

+0

太完美了!它起到了魅力的作用。 iOS做後臺工作,我已經嘗試266MB文件分割每個32 MB,並完美的工作!謝謝。 –

+0

這是否有任何文件大小限制?我認爲'dataWithContentsOfFile'返回的數據將存入內存,並且會有限制。 –