看起来在 Cocoa 上有很多方法可以将文件/文件夹目录移动到垃圾箱:

  • [[[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation]
  • [[NSWorkspace sharedWorkspace] recycleURLs:]
  • [NSFileManagertrashItemAtURL:]
  • [NSFileManager removeItemAtPath:]
  • [NSFileManager removeItemAtURL:]

  • 通过阅读此处的解释或指向 Apple 官方文档的链接,了解其中的区别会很好。

    此外,如果有人知道将文件/非空目录移动到废纸篓的通用方法,也很高兴知道。

    最佳答案

  • [[[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation]

  • 从 OS X 10.11 开始,这已被弃用,因此没有必要使用它。
  • [[NSWorkspace sharedWorkspace] recycleURLs:]

  • 这可能就是你想要的。它是异步的,因此您的应用程序可以在文件被移至垃圾箱时继续运行。
  • [NSFileManagertrashItemAtURL:]

  • 这类似于选项 2,但它是同步的,并且一次只处理一个文件。
  • [NSFileManager removeItemAtPath:]

  • 这不会破坏文件,它会立即永久删除它。
  • [NSFileManager removeItemAtURL:]

  • 这就像选项 4,除了使用 file://URL 而不是路径。当您已有 URL 而不是路径时更方便。
    NSWorkspaceNSFileManager 的引用页面很好地涵盖了这些方法之间的所有差异。

    这是一个快速示例,它使用 recycleUrls: 删除用户桌面上名为“Junk”的文件或文件夹:
    - (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]);
            }
        }];
    }
    

    关于macos - 正确地将对象移至废纸篓,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34034638/

    10-09 16:26