Best way to copy or move files with Objective-C?

纵饮孤独 提交于 2020-04-29 05:27:08

问题


I was wondering, is there a best practice to write an OSX programm that copies or moves a file from one place to another?

  • is there some NSSomething method I can call?
  • Do I have to work with Input/Output streams?
  • Or is the best way maybe to just rely on passing commands to the finder?

Bonus question: How do I get percentages a la "copy 12% complete" with one of these methods?

Thanks for your help!


回答1:


NSFileManager and NSWorkspace both have methods to move, copy, and delete files. Usually you'd use NSFileManager since its easier to work with:

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

However, NSWorkspace can easily move files to the Trash, which NSFileManager can't do.

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

Check the documentation for a more complete description of the two classes. (NSFileManager, NSWorkspace)




回答2:


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

Here's the link to the class reference:

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




回答3:


You can also use FSCopyObjectAsync function. You can display file copy progress and you can also cancel file copy using FSCopyObjectAsync().
Take a look at this post.

FSCopyObjectAsync is Deprecated in OS X v10.8

copyfile(3) is alternative for FSCopyObjectAsync. Here is example of copyfile(3) with Progress Callback.



来源:https://stackoverflow.com/questions/491809/best-way-to-copy-or-move-files-with-objective-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!