macos - 以编程方式放回垃圾箱中的项目

标签 macos cocoa

是否可以通过编程方式恢复放入垃圾箱的项目?我希望在我的应用程序中有一个“移至垃圾箱”按钮,但我希​​望能够撤消它而不保留我自己的副本。能够撤消移至垃圾箱是否不合适,还是应该将其作为永久性操作?

最佳答案

上次我检查时,“放回”功能完全是 Finder 特定的。也就是说,以编程方式将文件移动到垃圾箱甚至不允许 Finder 将其放回原处。只有被 Finder 丢弃的项目才能被 Finder 放回去。 (即使将某个项目从 Dock 上的文件夹拖到垃圾箱也不允许将其放回垃圾箱,因为是 Dock 而不是 Finder 垃圾了它。)

即使对于 Finder 可以放回的项目,也没有记录的方法以编程方式执行放回操作。

但是,对于您自己的应用程序,您当然可以撤消操作,而无需保留文件的单独副本(直到用户清空垃圾箱)。 -[NSWorkspace recycleURLs:completionHandler:] 将为您提供垃圾箱中项目的 URL。存储这些 URL 的书签数据和原始包含文件夹以及原始名称。要撤消,请解析回收站和原始包含文件夹中项目的书签数据,并将前者以原始名称移动到后者 - 但请确保不要破坏在其位置创建的任何新文件。如果在不破坏的情况下无法完成移动,请尝试在文件名中添加后缀号。继续递增,直到找到未使用的名称。

如果解析书签数据失败,则操作无法完成,您应该让用户知道。

关于macos - 以编程方式放回垃圾箱中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18707618/

相关文章:

python - 在 Python 中获取硬盘大小

objective-c - Cocoa 设置终端退出代码变量

xcode - 无法在 Swift 2.0 中正确使用 NSEventModifierFlags

cocoa - NSCollectionView 捏合缩放

macos - Java 问题 : Memory and CPU usage in MAC OS

ruby - 一些 heroku 命令找不到我的应用程序

objective-c - 防止其他窗口在 Cocoa 中获得焦点

macos - 有没有办法知道 shell/终端命令/应用程序的选项?

objective-c - 如何访问父类(super class)实例变量?

objective-c - NSSlider 弹出框