Задать вопрос
@Drovosek01

Какие есть нативные способы перемещения файла в Корзину на C# или .NET в Windows?

Когда писал pet-проект на Powershell с некоторыми вкраплениями C# хотел реализовать функционал не полностью удаления файлов/папок с накопителя, а перемещения их в Корзину пользователя.

Погуглив и пообщавшись с нейросетью нашел только способы из Powershell и C# переместить файлы в Корзину через прослойку VisualBasic

Пример на C#
код
using System;
using Microsoft.VisualBasic.FileIO;
class Program
{
    static void Main()
    {
        string filePath = @"C:\path\to\your\file.txt"; // Укажите путь к вашему файлу
        try
        {
            // Перемещение файла в корзину
            FileSystem.DeleteFile(filePath, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);
            Console.WriteLine("Файл перемещен в корзину.");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Произошла ошибка: {ex.Message}");
        }
    }
}


Я плохо гуглил или в .NET для Windows действительно нет способов перемещения файлов в корзину без использования VisualBasic или импорта dll-файлов?
  • Вопрос задан
  • 151 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
Это и есть нативный способ.
Microsoft.VisualBasic.FileIO - это не "прослойка visual basic", а вполне обычная библиотека. Она не более "не нативная" чем стандартная mscorlib или любая другая.

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

Альтернативный вариант - использовать функцию из winapi SHFileOperationA
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Василий Банников да ну
это же из windows 95 фунциональность вот:

$shell = New-Object -com shell.application
$rb = $shell.Namespace(10)

проще всего если там уже есть хотя бы 1 файл:
686e1cf03cc1f642595604.png
($rb.items() | select-object -first 1).Path
C:\$Recycle.Bin\S-1-5-21-3826591462-1902725790-3394240593-1001\$RXMK2R1

686e1e9b84c0e080935127.png

если нет ничего надо что то еще искать как но мне лично чуть некогда

new-item "a.txt"
 $rb.CopyHere("a.txt", 0)

($rb.items()).count
2
new-item "a2.txt"
$rb.CopyHere("a2.txt", 0)
($rb.items()).count

3
если понравилось - решением
686e1ee6ea48d619716555.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы