objektiv zip не работи с аудио файлове и не компресира съществуващи директории

използвам object-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

също така се опитах първо да сложа всичките си аудио файлове в една директория и след това да използвам object-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

дали object-zip поддържа само текстови файлове, защо object-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