正确地将对象移至垃圾箱
Properly move an object to the Trash
在 Cocoa 上似乎有很多方法可以将 file/folder-directory 移至回收站:
- [[[NSWorkspace 共享工作空间] performFileOperation:NSWorkspaceRecycleOperation]
- [[NSWorkspace sharedWorkspace] recycleURLs:]
- [NSFileManager trashItemAtURL:]
- [NSFileManager removeItemAtPath:]
- [NSFileManager removeItemAtURL:]
最好通过阅读此处的解释或 link Apple 官方文档来了解其中的区别。
此外,如果有人知道将 file/non-empty 目录移动到回收站的通用方法,那我会很高兴知道。
- [[[NSWorkspace 共享工作空间] performFileOperation:NSWorkspaceRecycleOperation]
从 OS X 10.11 开始,这已被弃用,因此没有必要使用它。
- [[NSWorkspace sharedWorkspace] 回收URLs:]
这可能是您想要的。它是异步的,因此您的应用程序可以在文件被移至回收站的同时继续运行。
- [NSFileManager trashItemAtURL:]
这与选项 2 类似,但它是同步的,并且一次只处理一个文件。
- [NSFileManager removeItemAtPath:]
这不会删除文件,而是立即将其永久删除。
- [NSFileManager removeItemAtURL:]
这与选项 4 类似,只是使用文件:// URL 而不是路径。当您已经有了 URL 而不是路径时会更方便。
NSWorkspace and NSFileManager 的参考页很好地涵盖了这些方法之间的所有差异。
这是一个快速示例,它使用 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]);
}
}];
}
在 Cocoa 上似乎有很多方法可以将 file/folder-directory 移至回收站:
- [[[NSWorkspace 共享工作空间] performFileOperation:NSWorkspaceRecycleOperation]
- [[NSWorkspace sharedWorkspace] recycleURLs:]
- [NSFileManager trashItemAtURL:]
- [NSFileManager removeItemAtPath:]
- [NSFileManager removeItemAtURL:]
最好通过阅读此处的解释或 link Apple 官方文档来了解其中的区别。
此外,如果有人知道将 file/non-empty 目录移动到回收站的通用方法,那我会很高兴知道。
- [[[NSWorkspace 共享工作空间] performFileOperation:NSWorkspaceRecycleOperation]
从 OS X 10.11 开始,这已被弃用,因此没有必要使用它。
- [[NSWorkspace sharedWorkspace] 回收URLs:]
这可能是您想要的。它是异步的,因此您的应用程序可以在文件被移至回收站的同时继续运行。
- [NSFileManager trashItemAtURL:]
这与选项 2 类似,但它是同步的,并且一次只处理一个文件。
- [NSFileManager removeItemAtPath:]
这不会删除文件,而是立即将其永久删除。
- [NSFileManager removeItemAtURL:]
这与选项 4 类似,只是使用文件:// URL 而不是路径。当您已经有了 URL 而不是路径时会更方便。
NSWorkspace and NSFileManager 的参考页很好地涵盖了这些方法之间的所有差异。
这是一个快速示例,它使用 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]);
}
}];
}