0

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

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");
        }
    }

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

说我在目录中有 3 个文件 file1.txt、file2.txt、file3.txt

当我调用此方法时,它只会删除 file1.txt 而不会删除其他文件,如果我再次调用该方法,它将删除 file2.txt 但不会删除 file3.txt

我怎样才能解决这个问题,,??

有什么办法可以删除目录??提前谢谢

4

1 回答 1

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:

于 2012-06-01T05:48:11.293 回答