Как я могу переместить файл в корзину / корзину на разных платформах, используя 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 в одно, я чувствую, и импортировал правильный по требованию. Так ты решил свою проблему в конце?