NSFileManager removeItemAtURL
再帰的な削除のみを実行します。空でないディレクトリには特別な扱いはありません。
事前に条件をテストして、空のディレクトリのみを削除するにはどうすればよいですか?contentsOfDirectoryAtPath
空の可能性があるファイルのリストを取得する必要がありますが、それはやり過ぎです。
あるいは、古き良き時代のように、空の場合にのみ削除する機能はありrmdir
ますか?ああ、私はそれを呼ぶことができます…</ p>
NSFileManager removeItemAtURL
再帰的な削除のみを実行します。空でないディレクトリには特別な扱いはありません。
事前に条件をテストして、空のディレクトリのみを削除するにはどうすればよいですか?contentsOfDirectoryAtPath
空の可能性があるファイルのリストを取得する必要がありますが、それはやり過ぎです。
あるいは、古き良き時代のように、空の場合にのみ削除する機能はありrmdir
ますか?ああ、私はそれを呼ぶことができます…</ p>
財団の土地に留まりたいなら、それを使わなければなりません。他に方法はありません。
ただし、そうすると、競合状態が発生します。ディレクトリの内容を一覧表示した後、削除する前に、他のプログラムがそこに新しいファイルを書き込んで削除する可能性があります。したがって、すべてのコンテンツを含むフォルダーを削除するという事実を受け入れるか、別の API を探す必要があります。
次のように、POSIXrmdir
関数を使用して目標を達成できます。
NSString *path = [url path];
int result = rmdir( [path fileSystemRepresentation] );
if (result == 0) // everything ok
else // lookup error code from errno
ディレクトリが空でない場合は、エラー コードが表示されますENOTEMPTY
。
やり過ぎではありません... のようなメソッドが必要な場合は、次のよう- isEmptyDirectoryAtURL:
にします。
@interface NSFileManager (EmptyDirectoryAtURL)
- (BOOL)isEmptyDirectoryAtURL:(NSURL*)url;
@end
@implementation NSFileManager (EmptyDirectoryAtURL)
- (BOOL)isEmptyDirectoryAtURL:(NSURL*)url
{
// This assumes you know the URL you have is actually a
// directory and should be enhanced to ensure that
return ([[self contentsOfDirectoryAtURL:url includingPropertiesForKeys:nil options:0 error:NULL] count] <= 1);
}
@end
NSFileManager デリゲート メソッド" fileManager:shouldRemoveItemAtURL:
"を実装し、そのデリゲート メソッドの実装で、" " を返す前に、A) 項目がディレクトリであるか、B) ディレクトリが空であるかを簡単に確認してくださいYES
。