C переместить файл в корзину

Обновлено: 04.07.2024

Весь функционал необходимый для создания, удаления, копирования или перемещения файлов сосредоточен в методах классов File и FileInfo. Они представлены в таблице ниже.

Все методы класса File статические, методы класса FileInfo работают только через объектную ссылку.

Многие из этих методов принимают строку в качестве параметра. Это строка содержит путь к файлу, его имя и расширение. Может быть возвращена методами класса Path. Путь может быть абсолютным (полный путь от корня диска до файла с расширением) или относительным, то есть отчитываться от текущей директории.

Для использования любого из этих методов следует включить пространство имен System.IO перед использованием их в коде приложения.

Удаление

Метод Delete класса File удаляет файл, путь к которому (относительный или абсолютный) передан ему строкой в качестве параметра.

Пример использования:

Удалить можно только созданный и закрытый файл. И если в первом случае не возникнет исключение, во втором – обязательно. Поэтому перед процедурой удаления лучше организовывать проверку существования файла:

Пример использования:

Копирование файлов

Класс File для удаления имеет в своей функционале метод Copy(), принимающий два параметра типа string: имя копируемого файла и имя конечного. Имена передаются методу вместе с путем к нему (абсолютным или относительным).

Метод копирует информацию из файла и все файловые атрибуты в файл-назначения с указанным именем. Если имена файла копируемого файла и файла назначения совпадают, копирование не будет выполнено. Если необходим такой функционал нужно воспользоваться перегруженной версией метода с третьим параметром типа Boolean.

Пример использования:

Метод CopyTo класса FileInfo принимает только один строковый параметр – файл назначения, работает аналогично методу Copy класса File.

Пример использования:

Файл назначения перед копированием не должен существовать. Метод CopyTo его создаст. Поэтому в примере выше инициирована проверка его существования перед копированием.

Перемещение файлов

Метод Move принимает два параметра типа string: файл-источник и файл-назначения. При вызове копирует информацию и все атрибуты из файла-источника в файл-назначения, затем файл источник удаляется. Конечный файл не должен существовать перед копированием.

Допустимо если имя файла-источника совпадает с именем фала назначения. Но перемещение файла-источника в файл-назначения внутри одной директории вызовет исключение.

Файл-источник не будет удален после перемещения, если файл был открыт, но не был зарыт до начала копирования. Перед копированием обязательно стоит удостовериться в том, что исходный файл существует.

Пример использования:

Вторая проверка существования файла-источника инициирована в тех случаях, когда перемещение совмещено в коде приложения с чтением файла. Особенно это касается многопоточных приложений. Если проверка показывает, что файл еще существет, то необходимо закрыть его и запустить процедуру удаления вручную, например, с помощью File.Delete.

Есть ли функция Qt для перемещения файлов в корзину вместо того, чтобы действительно удалять их, для ОС, которые его поддерживают, или мне нужно использовать специфичный для ОС код?

Решение

Проблема закрыта, и версия исправления: Некоторый будущий выпуск

Другие решения

Qt не предоставляет MoveToTrash. Вот часть моего кода

Я думаю, что нет кроссплатформенного пути. Простое перемещение файлов в «мусорную корзину» не даст эффекта, потому что пользователь может отключить эту возможность.

Я относительно уверен, что не существует API Qt, который оборачивает это для всех поддерживаемых платформ. К сожалению, это означает, что вам придется писать код для конкретной платформы.

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

/.Trash папка является стандартным способом сделать это, но я не уверен, что это надежно. Например, в случае файлов, хранящихся на внешних томах.

В Mac OS X все немного проще, и для этого есть поддерживаемый API: FSMoveObjectToTrashSync , предоставляемых Core Services. По крайней мере, я так помню, ты должен это делать. Документация утверждает, что этот метод в настоящее время устарел в OS X 10.8. Я понятия не имею, что является рекомендуемой альтернативой.

Как программист Windows, я думаю, что эта платформа намного проще. 🙂 Основным решением является вызов SHFileOperation функция:

Есть также флаги, которые вы можете установить, чтобы настроить подтверждение, отчеты об ошибках и другое поведение. Связанная документация содержит все детали, необходимые для построения этого базового примера.

В Windows Vista и более поздних SHFileOperation функция была заменена методами, предоставленными IFileOperation интерфейс. Если вы ориентируетесь только на эти более поздние версии Windows, вам следует использовать этот интерфейс. Иначе, SHFileOperation продолжит работать нормально.

Мусорные файлы в Linux существуют /home/user_name/.local/share/Trash/files/ каталог, но он также требует информационный файл для каждого файла корзины, которые существуют в /home/user_name/.local/share/Trash/info/ каталог. когда мы хотим переместить файл в корзину, на самом деле переместить файл в /home/user_name/.local/share/Trash/files/ каталог и создать информационный файл в /home/user_name/.local/share/Trash/info/ каталог. внутри .trashinfo Формат использует процентную схему декодирования для задания пути к файлу, в котором файл существует, в информационном файле также указывается время и дата удаления.

Читайте также: