1

我正在使用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 不压缩现有文件夹?欢迎任何帮助,谢谢。

4

1 回答 1

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

于 2014-02-04T13:42:14.027 回答