3

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

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

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

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

4 回答 4

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
}
于 2013-04-11T14:24:31.357 回答
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()仅当目录为空时才删除目录,因此无需在之前枚举目录。

于 2013-04-11T14:33:44.477 回答
1

我猜“theDirectory”要么为零,要么指向一个不存在的目录,因为只有在这些情况下,“!folderContents”才会评估为真。如果“theDirectory”指向一个现有文件夹,您将得到一个空数组并且不会进入“if”块。

于 2013-04-11T14:34:02.257 回答
0

尝试这个:

NSArray *folderContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:theDirectory error:&error];
//if (!folderContents)
if (folderContents.count == 0)
{
    NSLog(@"empty");
    [[NSFileManager defaultManager] removeItemAtPath:theDirectory error:&error];
}  
于 2013-04-11T14:24:10.450 回答