如何删除obj c中文件夹的内容

时间:2012-06-01 05:42:19

标签: objective-c ios xcode directory nsfilemanager

我使用以下方法删除文件夹的所有内容

NSFileManager *fm = [NSFileManager defaultManager];
    NSArray* arrFilePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * strFilePath = [arrFilePath objectAtIndex:0];
    NSString *directory = [strFilePath stringByAppendingPathComponent:@"Electronic_Instrumentation-Sapna_publications"];
    NSError *error = nil;
    for (NSString *file in [fm contentsOfDirectoryAtPath:directory error:&error]) 
    {
        directory = [directory stringByAppendingPathComponent:file];
        BOOL success = [fm removeItemAtPath:directory error:&error];
        file = nil;
        if (!success || error) 
        {
            NSLog(@"Failed to remove files");
        }
    }

但它只删除目录中的第一个文件

说我在dorectory file1.txt,file2.txt,file3.txt中有3个文件

当我调用这个方法时,它会删除file1.txt但不删除其他文件,如果我调用该方法,则删除file2.txt但不删除file3.txt

我该如何解决这个问题,??

有没有办法删除目录?提前谢谢

1 个答案:

答案 0 :(得分:3)

问题是您第一次进行循环时正在更改directory。此后,您使用的是无效路径。第一次循环,directory有类似的东西:

/path/to/the/file1.txt

下一次循环,你追加下一个文件名,所以directory变为:

/path/to/the/file1.txt/file2.txt

这显然不起作用。

找到这样的问题的最佳方法是逐步调试调试器中的代码,随时查看相关变量。

修复此问题的正确方法,即使您知道它是什么,也就是停止修改directory。您可以使用临时变量,如下所示:

for (NSString *file in [fm contentsOfDirectoryAtPath:directory error:&error]) 
{
    NSString *path = [directory stringByAppendingPathComponent:file];
    BOOL success = [fm removeItemAtPath:path error:&error];

或者您可以使用-stringByAppendingPathComponent:的结果作为-removeItemAtPath:error:的参数,如下所示:

for (NSString *file in [fm contentsOfDirectoryAtPath:directory error:&error]) 
{
    BOOL success = [fm removeItemAtPath:[directory stringByAppendingPathComponent:file]
                                  error:&error];
  

有没有办法删除目录?

您可以查看-removeItemAtPath:error:的文档。我会救你一次旅行:

  

指示要删除的文件或目录的路径字符串。如果路径   指定一个目录,该目录的内容是递归的   除去。

是的,有一种简单的方法可以删除目录。只需将path参数中的目录指定为-removeItemAtPath:error: