Как я могу переместить файл в корзину / корзину на разных платформах, используя PyQt4?

Я хотел бы добавить следующую функцию в мое кроссплатформенное приложение PyQt4: когда пользователь выбирает какой-либо файл и выбирает действие "удалить" над ним, этот файл будет перемещен в папку корзины, а не будет окончательно удален. Я думаю, что могу найти специфичное для Windows решение с использованием Win32 API или чего-то подобного, но я хотел бы знать, может ли аналогичная операция выполняться в Ubuntu/Linux и MaxOSX также с помощью методов PyQt4.

3 ответа

Решение

Хорошо, что вы используете Python, я создал библиотеку, чтобы сделать это некоторое время назад:

http://www.hardcoded.net/articles/send-files-to-trash-on-all-platforms.htm

На PyPI: Send2Trash

Монтаж

Используя conda:

conda install Send2Trash

Используя пункт:

pip install Send2Trash

использование

Удалить файл или папки

from send2trash import send2trash
send2trash("directory")

Я полагаю, что на самом деле не существует кроссплатформенного решения, предоставляемого Qt, и реализовать концепцию мусора в Linux не совсем тривиально, поскольку она немного отличается в зависимости от того, какой файловый менеджер используется.

Вот сайт, на котором обсуждается концепция мусора в Nautilus и еще один для KDE.

Под Windows вы можете использовать Win32 API, как вы сказали. Решение Python доступно здесь.

Mac OS X помещает мусорные файлы в ~/.Trash, как и другие *NIX ОС, но я не смог быстро найти в Google какую-либо документацию по этому вопросу. Кажется, что информационный файл мусорной корзины OS X является неким двоичным форматом, а не простым текстом, как в Linux.

У Symbian нет концепции рабочего стола и, следовательно, нет концепции мусорной корзины. Это может быть похоже на другие мобильные платформы.

РЕДАКТИРОВАТЬ: Super User имеет некоторые обсуждения, показывающие, что.DS_Store действительно хранит информацию о загруженных файлах, но не конкретику о формате.

Лучшее из известных мне OSX-решений использует Applescript. Я, однако, не изобрел его, поэтому просто сошлюсь на него здесь.

Было бы неплохо иметь модуль, который упаковывал бы решения Win32/KDE/OSX в одно, я чувствую, и импортировал правильный по требованию. Так ты решил свою проблему в конце?

Другие вопросы по тегам