web-dev-qa-db-ja.com

Objective-Cでファイルをコピーまたは移動する最良の方法?

ある場所から別の場所にファイルをコピーまたは移動するOSXプログラムを作成するためのベストプラクティスはあるのでしょうか。

  • 私が呼び出すことができるNSSomethingメソッドはありますか?
  • 入力/出力ストリームを使用する必要がありますか?
  • それとも、コマンドをファインダーに渡すことだけに頼る最善の方法ですか?

おまけの質問:これらの方法の1つで「コピー12%完了」のパーセンテージを取得するにはどうすればよいですか?

ご協力いただきありがとうございます!

32
winsmith

NSFileManagerとNSWorkspaceには、どちらもファイルを移動、コピー、削除するメソッドがあります。扱いやすいので、通常はNSFileManagerを使用します。

if ( [[NSFileManager defaultManager] isReadableFileAtPath:source] )
    [[NSFileManager defaultManager] copyItemAtURL:source toURL:destination error:nil];

ただし、NSWorkspaceではファイルをゴミ箱に簡単に移動できますが、NSFileManagerではできません。

[[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation source:foldername destination:@"" files:filenamesArray tag:&tag];

2つのクラスの詳細については、ドキュメントを確認してください。 ( NSFileManagerNSWorkspace

53

[[NSFileManager defaultManager] copyItemAtPath:srcPath toPath:dstPath error:&error]

これがクラス参照へのリンクです:

http://developer.Apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html#//Apple_ref/occ/instm/NSFileManager/copyItemAtPath:toPath:error: =

13
Ed Marty

FSCopyObjectAsync 関数を使用することもできます。ファイルコピーの進行状況を表示したり、FSCopyObjectAsync()を使用してファイルコピーをキャンセルしたりすることもできます。
これを見てください 投稿

FSCopyObjectAsyncはOS X v10.8で廃止予定です

copyfile(3) はFSCopyObjectAsyncの代替です。 ここ は、Progress Callbackを使用したcopyfile(3)の例です。

5
Parag Bafna