如果为空,删除目录

时间:2013-04-11 14:21:33

标签: ios objective-c nsfilemanager

我正在尝试检查文件夹是否为空,如果是,请使用以下代码将其删除:

NSArray *folderContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:theDirectory error:&error];
if (!folderContents){
    if (folderContents.count == 0)
    {
        NSLog(@"empty");
        [[NSFileManager defaultManager] removeItemAtPath:theDirectory error:&error];
    }  
}

这没有用,我猜我错过了一些愚蠢的东西,但会很感激任何指针。

  • 更新: 问题是我自己的愚蠢 - 在第二行迷路!。 删除它,它按预期工作。

4 个答案:

答案 0 :(得分:7)

你想要这个:

NSError *error = nil;
NSArray *folderContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:theDirectory error:&error];
if (folderContents) {
    if (folderContents.count == 0) {
        NSLog(@"empty");
        [[NSFileManager defaultManager] removeItemAtPath:theDirectory error:&error];
    }
} else {
    // log error
}

答案 1 :(得分:2)

有时POSIX方法更有效:

#include <unistd.h> 

if (rmdir([theDirectory fileSystemRepresentation]) == 0) {
    // directory successfully removed (must have been empty!)
} else if (errno == ENOTEMPTY) {
    // directory not empty
} else {
    // other error
}

rmdir()仅在目录为空时才删除目录,因此无需在之前枚举目录。

答案 2 :(得分:1)

我猜“theDirectory”是nil或指向不存在的目录,因为只有在那些情况下“!folderContents”才会评估为true。如果“theDirectory”指向现有文件夹,则会得到一个空数组,并且不会进入“if”块。

答案 3 :(得分:0)

试试这个:

NSArray *folderContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:theDirectory error:&error];
//if (!folderContents)
if (folderContents.count == 0)
{
    NSLog(@"empty");
    [[NSFileManager defaultManager] removeItemAtPath:theDirectory error:&error];
}