如何使用 NSFileManager 删除目录及其内容

Posted

技术标签:

【中文标题】如何使用 NSFileManager 删除目录及其内容【英文标题】:How to remove a directory and its contents using NSFileManager 【发布时间】:2010-09-08 04:44:58 【问题描述】:

Objective C 的新手。我创建了一些包含 iPhone 应用程序的 pdf 文件的目录。?

我需要先循环并删除内容吗?任何代码示例将不胜感激。

提前致谢。

【问题讨论】:

【参考方案1】:

首先,明智的做法是查看 Apple 针对 iPhone 的 NSFileManager 文档:NSFileManager Class Reference。其次,查看NSFileManager-removeItemAtPath:error: 方法及其文档。这就是你要找的。​​p>

【讨论】:

如果我将目录传递给 -removeItemAtPath:error: 它还会删除内容吗?听起来像一个愚蠢的问题,但我发现的唯一另一个例子是先删除目录的内容。 是的,它会的,如果您对某事有任何疑问,只需设置一个小型测试程序,看看是否有。 @ItaiFerber 试一试很好,但询问会导致在网络上发布可搜索的、众包的答案。所以:先问有好处。 @GregMaletic 我的评论旨在强化这样一种观点,即如果有人对 Apple 的文档或关于 SO 的任何答案有疑问,自我验证确实可以帮助澄清正在发生的事情。不多也不少。 :)【参考方案2】:

这是我使用的一些代码,我已根据问题进行了编辑

- (NSMutableString*)getUserDocumentDir 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSMutableString *path = [NSMutableString stringWithString:[paths objectAtIndex:0]];
    return path;



- (BOOL) createMyDocsDirectory

    NSMutableString *path = [self getUserDocumentDir];
    [path appendString:@"/MyDocs"];
    NSLog(@"createpath:%@",path);
    return [[NSFileManager defaultManager] createDirectoryAtPath:path
                                           withIntermediateDirectories:NO
                                           attributes:nil 
                                           error:NULL];


- (BOOL) deleteMyDocsDirectory 

    NSMutableString *path = [self getUserDocumentDir];
    [path appendString:@"/MyDocs"];
    return [[NSFileManager defaultManager] removeItemAtPath:path error:nil];

【讨论】:

如何删除特定的图片集? 考虑 stringByAppendingPathComponent 而不是 appendString! @Bazinga 检查此***.com/a/67891146/3124756【参考方案3】:

您可以使用以下方式获取文档目录:

NSString *directoryPath = [NSHomeDirectory() stringByAppendingString:@"/Documents/"];

**通过使用此删除完整目录路径:

BOOL success = [fileManager removeItemAtPath:directoryPath error:nil];
if (!success) 
    NSLog(@"Directory delete failed");

**使用此删除该目录的内容:

NSFileManager *fileManager = [NSFileManager defaultManager];    
if ([fileManager fileExistsAtPath:directoryPath]) 
            NSDirectoryEnumerator *dirEnum = [fileManager enumeratorAtPath:directoryPath];
            NSString *documentsName;
            while (documentsName = [dirEnum nextObject]) 
                NSString *filePath = [directoryPath stringByAppendingString:documentsName];
                BOOL isFileDeleted = [fileManager removeItemAtPath:filePath error:nil];
                if(isFileDeleted == NO) 
                    NSLog(@"All Contents not removed");
                    break;
                
            
            NSLog(@"All Contents Removed");
        

** 您可以根据需要编辑directoryPath

【讨论】:

以上是关于如何使用 NSFileManager 删除目录及其内容的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 NSFileManager 将目录A下所有文件拷贝到 目录B

ios NSFileManager 用法详解

NSFileManager UUID 应用目录

如何使用 NSFileManager 复制 UNIX 可执行文件?

NSFileManager类与文件操作

NSFileManager类与文件操作