使用 C++ 在 Linux 中将文件移动到垃圾箱
Posted
技术标签:
【中文标题】使用 C++ 在 Linux 中将文件移动到垃圾箱【英文标题】:Moving files to Trash Can in Linux using C++ 【发布时间】:2011-10-10 05:26:40 【问题描述】:我正在尝试使用 C++(也将 QT4 用于 GUI)将文件移动(删除)到垃圾箱(在 Linux 中)。不幸的是,这样做似乎很困难,据我所知,没有统一的 API。
我希望我的应用程序不仅可以在 KDE 上运行,而且可以在 GNOME、Xfce 和其他 Linux 桌面环境上运行。这就是为什么我正在寻找一种更通用的方法。
到目前为止我能找到的最好的是:
send2trash - 但这是使用 Python/QT4 而不是 C++/QT4 trash-cli - 这是一个独立的命令行程序而不是库的缺点我会对任何需要尽可能少的桌面环境特定代码的方法感到满意。或者换句话说,它尽可能独立于 KDE/GNOME/Xfce 组件。
非常感谢您在寻找解决方案方面的任何帮助(如果有的话)。
【问题讨论】:
看不出来trash-cli是怎么做的? 此链接可能对您有所帮助:ramendik.ru/docs/trashspec.html 您说的都是对的,但那将是最后的解决方案。它正在重新发明***。换句话说,不是使用一个库,而是编写一个库。就像 send2trash 一样,垃圾 cli 是用我没有经验的 Python 编写的。 原来的 FreeDesktop 规范是here; AFAIK 至少有 KDE、Gnome 和 XFCE 跟随它,它是trash-cli
支持的。
【参考方案1】:
据我所知,Linux 一开始就没有标准的垃圾桶。
【讨论】:
OP 似乎很清楚这个功能存在于每个窗口管理器中。【参考方案2】:为什么不找到一个终端命令来移动文件,然后调用system() 在您的 C++ 程序中为您运行它?
This 可能(我还没有测试过)可能是 Linux 中通过终端将文件移动到垃圾箱的单线。您只需将命令作为带引号的字符串传递给 system()
并在您的 C++ 实现中调用它。
【讨论】:
它类似于我在原始帖子中提到的垃圾-cli。您的解决方案的问题在于它不考虑其他分区/驱动器上的垃圾箱和文件。它只是将它们(如果它在另一个驱动器上 - 在驱动器之间复制它们)移动到您家的垃圾箱。无论如何,谢谢你的回答。std::system("gio trash ...")
非常适合我【参考方案3】:
答案在
http://www.freedesktop.org/wiki/Specifications/trash-spec
必须为每个用户提供一个“家庭垃圾”目录。它的名称和位置是 $XDG_DATA_HOME/Trash
您只需编写 C++ 代码将您的文件移动到该目录。
您可以使用boost file system 移动文件,并且可以使用cstlib getenv 检索XDG_DATA_HOME 值。
【讨论】:
“必须”是否可能意味着“如果您要遵守”?事实上,我的 Redhat Enterprise Linux 机器在工作时没有默认设置 XDG_DATA_HOME 环境变量。我的垃圾箱在 $HOME/Desktop/Trash/.directory ... 我运行的是 Ubuntu 11.04,我的主目录中没有这样的文件夹。但是 cstlib getenv 在其他方面对我有用,谢谢。 实施范围有多广? freedesktop.org/wiki/Specifications 在新的但尚未广泛使用的规范草案中列出了这一点。 谢谢,帕洛。这解释了很多。以上是关于使用 C++ 在 Linux 中将文件移动到垃圾箱的主要内容,如果未能解决你的问题,请参考以下文章
在 Unix/Linux 中将文件移动到不同目录所需的权限 [关闭]
Macbook pro废纸篓总显示我的移动硬盘有个文件正在使用无法删除。