Properly move an object to the Trash

前端 未结 1 667
一个人的身影
一个人的身影 2021-01-18 13:41

It looks like on Cocoa there are many ways to move file/folder-directory to Trash:

  1. [[[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOpera
相关标签:
1条回答
  • 2021-01-18 14:19
    1. [[[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation]

    This is deprecated, as of OS X 10.11, so no point in using it.

    1. [[NSWorkspace sharedWorkspace] recycleURLs:]

    This is probably the one you want. It's asynchronous, so your application can continue to operate while the files are being moved to the trash.

    1. [NSFileManager trashItemAtURL:]

    This is similar to option 2, but it's synchronous, and only handles one file at a time.

    1. [NSFileManager removeItemAtPath:]

    This doesn't trash the file, it deletes it permanently, and immediately.

    1. [NSFileManager removeItemAtURL:]

    This is just like option 4, except using a file:// URL instead of a path. More-convenient when you already have a URL rather than a path.

    The reference pages for NSWorkspace and NSFileManager cover all of the differences between these methods fairly well.


    Here's a quick sample, which uses recycleUrls: to delete a file or folder named "Junk" on the user's desktop:

    - (IBAction)deleteJunk:(id)sender {
        NSFileManager *manager = [NSFileManager defaultManager];
        NSURL *url = [manager URLForDirectory:NSDesktopDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; // get Desktop folder
        url = [url URLByAppendingPathComponent:@"Junk"]; // URL to a file or folder named "Junk" on the Desktop
        NSArray *files = [NSArray arrayWithObject: url];
        [[NSWorkspace sharedWorkspace] recycleURLs:files completionHandler:^(NSDictionary *newURLs, NSError *error) {
            if (error != nil) {
                //do something about the error
                NSLog(@"%@", error);
            }
            for (NSString *file in newURLs) {
                NSLog(@"File %@ moved to %@", file, [newURLs objectForKey:file]);
            }
        }];
    }
    
    0 讨论(0)
提交回复
热议问题