3

次のコードを使用して、フォルダーが空であるかどうかを確認し、空である場合は削除しようとしています。

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

これはうまくいきませんでした。何かばかげたことを見逃したと思いますが、何かポインタをいただければ幸いです。

  • 更新:問題は私自身の愚かさでした-2!行目に迷いました。それを削除すると、期待どおりに機能します。
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」が nil であるか、存在しないディレクトリを指していると思います。これらの場合にのみ「!folderContents」が true と評価されるからです。「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 に答える