объективный zip не работает с аудиофайлами и не сжимает существующие каталоги

я использую объектив-zip для сжатия аудиофайлов в zip-файл, но когда я делаю это, мне появляется это исключение:

Terminating app due to uncaught exception 'ZipException', reason: 
'Error in opening '/Users/macuser/Library/Application 
Support/iPhoneSimulator/5.1/Applications/79E57C84-3B47-437C-BB44- 
89BAAB034DF5/Documents/ADDRecordFileForTest_0_07-05-2012 12:42:45.caf' in zipfile

также я попытался сначала поместить все свои аудиофайлы в один каталог, а затем использовать target-zip для сжатия этих каталогов, но также возникает исключение ниже:

Terminating app due to uncaught exception 'ZipException', reason: 
'Can't open '/Users/macuser/Library/Application Support/iPhone Simulator/5.1/
Applications/79E57C84-3B47-437C-BB44-89BAAB034DF5/Documents/
CurrentMeeting_AudioFiles

Objective-ZIP поддерживает только текстовые файлы, почему Objective-ZIP не сжимает существующие папки? любая помощь приветствуется, спасибо.


person chostDevil    schedule 07.05.2012    source источник


Ответы (1)


Двоеточия в именах файлов могут вызвать проблемы.

ADDRecordFileForTest_0_07-05-2012 12:42:45.caf

Рассмотрите возможность использования тире. Я бы тоже не использовал пробелы. По крайней мере, до тех пор, пока вам не придется работать с именами файлов, созданными пользователями (для удобства/опыта пользователя).

Кроме того, zip обычно не сохраняет каталоги. Однако, если вы заархивируете файл в папке, каталог будет частью пути. Я еще не использовал Objective-Zip, но попробую, так как ZipArchive в настоящее время у меня не работает, так как мне это нужно. Я написал категорию «zip -r» для ZipArchive, которая в основном работает следующим образом:

- (NSDictionary *)directoriesAndFilesAtPath:(NSString *)path error:(NSError * __autoreleasing *)error {
    NSFileManager *fileManager = [[NSFileManager alloc] init];
    NSError *fileManagerError = nil;
    NSArray *directoryContents = [fileManager contentsOfDirectoryAtPath:path error:&fileManagerError];
    if (!directoryContents) {
        *error = fileManagerError;
        return nil;
    }

    BOOL isDir;
    NSMutableArray *dirs = [NSMutableArray arrayWithCapacity:10];
    NSMutableArray *files = [NSMutableArray arrayWithCapacity:10];
    for (NSString *object in directoryContents) {
        if ([fileManager fileExistsAtPath:[path stringByAppendingPathComponent:object] isDirectory:&isDir]) {
            if (isDir) {
                [dirs addObject:[path stringByAppendingPathComponent:object]];
            } else {
                [files addObject:[path stringByAppendingPathComponent:object]];
            }
        }
    }

    return @{kDirectoriesKey: dirs, kFilesKey: files};
}

Затем вы можете использовать рекурсивный метод, добавляя файлы в zip и вызывая себя для каждого каталога.

person Felix Lieb    schedule 04.02.2014