使用 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 中将文件移动到不同目录所需的权限 [关闭]

如何在 Linux 中将主目录移动到新分区或磁盘?

Macbook pro废纸篓总显示我的移动硬盘有个文件正在使用无法删除。

是否可以在 C++ 中将返回值移动语义与受保护的复制构造函数一起使用?

在 gcc Linux 中将静态库链接到动态库

在 C++ 中将 memset 与多维数组一起使用