Лучший способ скопировать или переместить файлы с помощью Objective-C?
Мне было интересно, есть ли практика написания программы OSX, которая копирует или перемещает файл из одного места в другое?
- Есть ли какой-нибудь метод NSSomething, который я могу назвать?
- Должен ли я работать с потоками ввода/вывода?
- Или лучший способ, возможно, просто полагаться на передачу команд поиску?
Бонусный вопрос: как мне получить проценты a la "copy 12% complete" с одним из этих методов?
Спасибо за вашу помощь!
Ответы
Ответ 1
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];
Проверьте документацию для более полного описания двух классов. (NSFileManager, NSWorkspace)
Ответ 2
[[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:
Ответ 3
Вы также можете использовать функцию FSCopyObjectAsync. Вы можете просмотреть ход копирования файла, и вы также можете отменить копирование файла с помощью FSCopyObjectAsync().
Взгляните на этот пост.
FSCopyObjectAsync устарел в OS X v10.8
copyfile (3) является альтернативой для FSCopyObjectAsync. Здесь приведен пример файла copy (3) с обратным вызовом Progress.