3

NSFileManager removeItemAtURL再帰的な削除のみを実行します。空でないディレクトリには特別な扱いはありません。

事前に条件をテストして、空のディレクトリのみを削除するにはどうすればよいですか?contentsOfDirectoryAtPath空の可能性があるファイルのリストを取得する必要がありますが、それはやり過ぎです。

あるいは、古き良き時代のように、空の場合にのみ削除する機能はありrmdirますか?ああ、私はそれを呼ぶことができます…</ p>

4

3 に答える 3

7

財団の土地に留まりたいなら、それを使わなければなりません。他に方法はありません。

ただし、そうすると、競合状態が発生します。ディレクトリの内容を一覧表示した後、削除する前に、他のプログラムがそこに新しいファイルを書き込んで削除する可能性があります。したがって、すべてのコンテンツを含むフォルダーを削除するという事実を受け入れるか、別の API を探す必要があります。

次のように、POSIXrmdir関数を使用して目標を達成できます。

NSString *path = [url path];
int result = rmdir( [path fileSystemRepresentation] );
if (result == 0) // everything ok
else // lookup error code from errno

ディレクトリが空でない場合は、エラー コードが表示されますENOTEMPTY

于 2012-07-04T06:26:32.777 に答える
2

やり過ぎではありません... のようなメソッドが必要な場合は、次のよう- 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
于 2012-07-04T06:29:07.147 に答える
0

NSFileManager デリゲート メソッド" fileManager:shouldRemoveItemAtURL:"を実装し、そのデリゲート メソッドの実装で、" " を返す前に、A) 項目がディレクトリであるか、B) ディレクトリが空であるかを簡単に確認してくださいYES

于 2012-07-04T06:26:05.230 に答える