目标zip不使用音频文件而不压缩现有目录

时间:2012-05-07 12:56:43

标签: objective-c zlib

我正在使用objective-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

我也尝试先将所有音频文件放入一个目录,然后使用objective-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不压缩现有文件夹?欢迎任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

文件名中的冒号可能会导致问题。

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

考虑使用破折号。我也不会使用空格。至少只要您不必处理用户创建的文件名(为了方便/用户体验)。

更多的zip通常不会保留目录。但是,如果您在文件夹中压缩文件,则该目录是路径的一部分。我没有使用Objective-Zip,但是 - 会尝试,因为ZipArchive目前不适合我,因为我需要它。我为ZipArchive写了一个“zip -r”类,基本上是这样的:

- (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并为每个目录调用自身。