3

Cocoaでファイル(存在する場合と存在しない場合があります)を削除する正しい方法は何ですか?

存在しないファイルを削除しようとすると、エラーが発生します。それでも、ファイルが存在するかどうかを尋ねるのはお勧めできません。

ファイルシステムの現在の状態またはファイルシステム上の特定のファイルに基づいて動作を予測しようとすることはお勧めしません。これを行うと、奇妙な動作や競合状態が発生する可能性があります。操作が成功するかどうかを事前に把握するよりも、操作(ファイルのロードやディレクトリの作成など)を試行し、エラーをチェックして、それらのエラーを適切に処理する方がはるかに優れています。

私は現在、次のことを行っています。

[[NSFileManager defaultManager] removeItemAtPath:filePath error:&error];
if (error.code != NSFileNoSuchFileError) {
    NSLog(@"%@", error);
}

他に知っておくべき国境のケースはありますか?

4

2 に答える 2

12

Cocoaでファイル(存在する場合と存在しない場合があります)を削除する正しい方法は何ですか?

存在しないファイルを削除しようとすると、エラーが発生します。それでも、ファイルが存在するかどうかを尋ねることはお勧めできません。

ファイルシステムの現在の状態またはファイルシステム上の特定のファイルに基づいて動作を予測しようとすることはお勧めしません。これを行うと、奇妙な動作や競合状態が発生する可能性があります。操作が成功するかどうかを事前に把握するよりも、操作(ファイルのロードやディレクトリの作成など)を試行し、エラーをチェックして、それらのエラーを適切に処理する方がはるかに優れています。

正しい方法は、そこに書かれていることです。試してみて、エラーが発生するかどうかを確認してください。

一部のエラー、特にそのようなファイルがない場合は、無視してかまいません。また、回復を試みたい場合もあります。たとえば、エラーが権限に関連している場合は、管理者権限を要求しようとする場合があります。致命的なものはすべて、ユーザーに提示する必要があります。

私は現在、次のことを行っています。

[[NSFileManager defaultManager] removeItemAtPath:filePath error:&error];
if (error.code != NSFileNoSuchFileError) {
    NSLog(@"%@", error);
}

他に知っておくべき国境のケースはありますか?

はい:

  • errornilメソッドが成功したときにに設定される(またはまったく設定される)ことは保証されません。メソッドが最初に失敗したかどうかを確認しerror、メソッドが実際に失敗を返した場合にのみ使用を試みる必要があります。
  • NSErrorには、ドメインとコードの両方があります。これらの1つだけをチェックしています。コードの意味はドメインによって決定されます。たとえば、4は、Cocoaエラードメインでは「そのようなファイルはありません」を意味しますが、POSIXエラードメインでは「システムコールの中断」を意味し、OSStatusエラードメインでは「ゼロ除算」を意味します。そのため、テストしているエラーのドメインとコードの両方を比較する必要があります。
  • このコードがメインスレッド以外のスレッドで実行される場合、使用defaultManagerは間違っています。独自のNSFileManagerオブジェクトを作成し、それを使用します。
  • 開発中のデバッグにはコンソールへのログ記録で十分ですが、これをpresentError:メッセージに変更して(まだ行っていない場合はメインスレッドで)、アラートボックスでユーザーに報告する必要があります。
于 2012-09-26T17:44:42.317 に答える
1

あなたは的を射ていると思います。私も行う唯一のことは、NSFileManagerDelegateを使用して、ファイルを削除する前/後に(エラーが発生した場合)何をすべきかを決定することです。

于 2012-09-26T11:45:46.287 に答える