在 Linux 中使用 C++ 将文件移动到回收站

13

我正在尝试使用C++(还使用QT4进行GUI)将文件移动(删除)到Linux垃圾桶中。不幸的是,这似乎相当困难,并且据我所知,没有统一的API可用。

我希望我的应用程序在不仅限于KDE,还能适用于GNOME、Xfce和其他Linux桌面环境。这就是为什么我正在寻找一种更通用的方法。

目前我找到的最好的解决方案是:

  • send2trash - 但它是使用Python/QT4而不是C++/QT4
  • trash-cli - 这个存在缺点,即它是一个独立的命令行程序而不是库

我希望找到任何需要尽可能少的特定于桌面环境的代码的解决方案。换言之,它与KDE/GNOME/Xfce组件的依存性尽可能小。

如果有解决方案,任何帮助都将不胜感激。


1
你不能看一下 trash-cli 是怎么做的吗? - R. Martinho Fernandes
3
这个链接可能对你有所帮助:http://www.ramendik.ru/docs/trashspec.html。 - SirDarius
你们两个都是对的,但那将是最后的解决方案。这是重新发明轮子。换句话说,这意味着编写一个库而不是使用一个库。此外,trash-cli就像send2trash一样,是用Python编写的,而我没有经验。 - Engos
4
自由桌面规范的原始文档在此处:http://freedesktop.org/wiki/Specifications/trash-spec;据我所知,至少有KDE、Gnome和XFCE遵循了该规范,并且它是`trash-cli`支持的规范。 - Matteo Italia
3个回答

1

为什么不找一个终端命令来移动文件,然后在你的C++程序中调用system()来运行它呢?

这个方法可能(我没有测试过)是Linux中通过终端将文件移动到垃圾箱的一种可能的一行代码。你只需要将命令作为引号字符串传递给system(),并在你的C++实现中调用它。


这与我在原始帖子中提到的trash-cli类似。您解决方案的问题在于它没有考虑到垃圾桶和其他分区/驱动器上的文件。它只是将它们移动(如果它们在另一个驱动器上-在驱动器之间复制)到您的家庭垃圾箱。无论如何,谢谢您的答案。 - Engos
std::system("gio trash ...") 对我来说非常好用。 - Matt Eding

1

1
“MUST” 是否意味着 “如果你要符合标准”?就目前而言,我在工作中使用的 Redhat Enterprise Linux 系统默认没有设置 XDG_DATA_HOME 环境变量。我的回收站位于 $HOME/Desktop/Trash/.directory 下。 - Don Wakefield
这个实现被广泛采用吗? - Paŭlo Ebermann
2
http://www.freedesktop.org/wiki/Specifications 将此列为新的、尚未广泛使用的草案规范 - Paŭlo Ebermann
谢谢,Paŭlo。那解释了很多事情。 - Engos
回收站中的文件是否可以通过用户点击“还原”按钮来恢复? - Tebe
显示剩余2条评论

0
据我所知,Linux 中一开始并没有标准的垃圾桶。

OP似乎很清楚这个功能存在于每个窗口管理器中。 - André Caron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接