Objective C - 删除目录中的文件,而不删除 zip 中的文件

Posted

技术标签:

【中文标题】Objective C - 删除目录中的文件,而不删除 zip 中的文件【英文标题】:Objective C - Delete files within a directory, without deleting files inside a zip 【发布时间】:2015-02-13 18:19:09 【问题描述】:

如何删除目录中的文件而不删除该目录中 zip 中的相同文件?

以我的文档为例:

包含log.txt、message.txt、button.txt、log.zip。

在 log.zip 中,它包含 log.txt、message.txt、button.txt。

当我尝试做这样的事情时:

NSArray *zipFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSDocumentDirectory error:&error];
for (int i = 0; i < Files.count; i++) 
    id myArrayElement = [Files objectAtIndex:i];
    if ([myArrayElement rangeOfString:@"Button"].location !=NSNotFound || [myArrayElement rangeOfString:@"message"].location !=NSNotFound || [myArrayElement rangeOfString:@"log"].location !=NSNotFound) 
            id myArrayElement = [Files objectAtIndex:i];
            //Clean up the files in that specified directory.
            NSFileManager *fileManager = [NSFileManager defaultManager];
            NSString *filePath = [zipDirectory stringByAppendingPathComponent:myArrayElement];
            BOOL success = [fileManager removeItemAtPath:filePath error:&error];
            if (success) 
                NSLog(@"Successfully cleaned up files in user specified directory.");
            
            else
            
                NSLog(@"Could not delete file -:%@ ",[error localizedDescription]);
            
    

它将删除我的 .zip 中的文件以及 zip 之外的文件,这些文件巧合地同名。我只想删除 .zip 文件之外的 3 个文件,而不是 .zip 文件中的 3 个文件。

【问题讨论】:

我建议您删除if 语句的主体,并放入一个打印匹配文件名的NSLog。我希望您得到六个匹配项,并且您需要知道匹配的名称是什么。 尝试将 [myArrayElement rangeOfString:@"log"].location !=NSNotFound 替换为 [myArrayElement rangeOfString:@"log.txt"].location !=NSNotFound ;) @stosha,我当然可以做到这一点,因为这不是处理未来删除文件的好方法。举个例子,我有数百个文件,都叫 log、log1.txt、log2.txt、......、log100.txt,硬编码从来都不是一个好习惯。对于我正在编写的程序,无论用户可能做什么,我都必须考虑这种情况。 你能在你的代码中插入这个字符串吗:NSLog(@"%@", filePath);并告诉我们你删除了哪些文件? /Users/Admin/Documents/messages.txt, /Users/Admin/Documents/log.txt, /Users/Admin/Documents/Button.txt 【参考方案1】:

您正在测试包含“button”、“msg”或“log”的文件路径。路径“log.txt”和“log.zip”都包含“log”,因此您也可以删除您的 zip 文件。

您没有准确地说出您要删除的所有非 zip 文件?所有 .txt 文件?名称遵循特定模式的文件?文件也包含在同一文件夹中的 ZIP 中(需要访问代码中的 ZIP 内容)?

如果只是 .txt 文件,您可以测试 filePath.extension 是否为 @"txt",或者如果您希望保留 ZIP 文件测试它是否不是 @"zip" 等。如果它是遵循模式的名称,请考虑 @987654324 @。

HTH

【讨论】:

以上是关于Objective C - 删除目录中的文件,而不删除 zip 中的文件的主要内容,如果未能解决你的问题,请参考以下文章

Objective C 中的目录大小

删除目录中的所有文件而不删除符号链接及其指向的文件

从文档目录中的文件夹创建 ZIP 文件 - Objective C (ARC)

IOS项目目标中的多个Objective C桥接头

iPhone/Objective C:无法删除文件

从 UI 浏览目录并选择一个文件,获取文件的位置并在 Objective C 中的 Mac OS 应用程序的字符串变量中读取它的内容