如何使用 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