我正在尝试检查文件夹是否为空,如果是,请使用以下代码将其删除:
NSArray *folderContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:theDirectory error:&error];
if (!folderContents){
if (folderContents.count == 0)
{
NSLog(@"empty");
[[NSFileManager defaultManager] removeItemAtPath:theDirectory error:&error];
}
}
这没有用,我猜我错过了一些愚蠢的东西,但会很感激任何指针。
!
。
删除它,它按预期工作。答案 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];
}