библиотека для iOS для разделения огромных бинарных файлов по определенным размерам? - PullRequest
2 голосов
/ 02 декабря 2011

Я ищу библиотеку для разделения (деления) двоичного файла на несколько файлов. Если во временной папке iOS размер файла с именем «test.m4v» составляет 20 МБ (NSTevenDirectory ()), Я хотел бы разделить это на

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

Что-то в этом роде (не обязательно должно быть «7 МБ», может быть и 5 МБ)

как команда разделения командной строки. , я не думаю, что мы можем вызвать эту команду внутри приложения iOS.

Существует ли библиотека iOS (бесплатная / платная) для этого? Мне может понадобиться просто низкоуровневый доступ и написать его, но мне лень это делать;)

1 Ответ

3 голосов
/ 02 декабря 2011

Это должно сработать, если файл не настолько большой, что его волнует 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;
}

Проверка ошибок, очевидно, должна быть более надежной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...