Cómo vaciar la papelera de reciclaje en windows usando C# .NET

Sea cual sea la razón por la que quieras vaciar la papelera de reciclaje en Windows, este artículo te puede resultar bastante útil para completar tu tarea fácil y rapidamente. El snippet que usaremos es bastante sencillo de entender e implementar, simplemente sigue cada uno de los pasos que se mencionarán a continuación y estarás listo para vaciar la papelera con un simple click en un par de minutos.

Vaciando la papelera

Como primera medida incluye el namespace que necesitas para poder vaciar la papelera, agrega una referencia a InteropServices al inicio de tu clase que será usada para importar el método DLLImport más tarde.

using System.Runtime.InteropServices;

Despues, crea una variable enum que almacenará los códigos necesarios que nuestra función para limpiar esperará como argumento:

enum RecycleFlags : uint { 
   SHRB_NOCONFIRMATION = 0x00000001, // No solicitar confirmación al vaciar
   SHRB_NOPROGRESSUI = 0x00000002, // No mostrar ningun dialogo de windows
   SHRB_NOSOUND = 0x00000004 // No provocar ningun sonido, modo ninja activado :v
}

Luego crea la función que se encargará de limpiar la papelera de reciclaje, está requiere la DLL de Shell32.dll, por eso incluimos previamente al inicio de nuestra clase el namespace System.Runtime.InteropServices para importarla y poder usar la función SHEmptyRecycleBin de esta. Así que solo tienes que declararla :

[DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
static extern uint SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath, RecycleFlags dwFlags);

Ahora que el método SHEmptyRecycleBin está declarado, podemos usarlo para limpiar la papelera. Agrega un botón en tu interfaz que permitirá limpiar la papelera con un simple click y usa el siguiente código para crear un dialogo de confirmación (en caso de que quieras) y finalmente limpie la papelera:

// Si simplemente, quieres limpair la papelera sin dialogos , usa :
//uint IsSuccess = SHEmptyRecycleBin(IntPtr.Zero, null, RecycleFlags.SHERB_NOCONFIRMATION);

// En click del botón
private void button1_Click(object sender, EventArgs e)
{
       DialogResult result;
       result = MessageBox.Show("Quieres limpiar la papelera", "vaciar papelera", MessageBoxButtons.YesNo);
       // Si acepto, proceder a limpiar
       if (result == DialogResult.Yes)
       {
            try
            {
                 // Ejecutar el método creado previamente con los argumentos requeridos
                 uint IsSuccess = SHEmptyRecycleBin(IntPtr.Zero, null, RecycleFlags.SHRB_NOCONFIRMATION);
                 MessageBox.Show("La papelera ha sido vaciada satisfactoriamente", "Vaciar papelera de reciclaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {   
                 // Manipular excepciones
                 MessageBox.Show("No se pudo vaciar la papelera: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                 Application.Exit();
            }
       }
}

Vaciar papelera mensaje satisfactorio

Sencillo, verdad?

Clase completa

Tu clase completa debería lucir similar a la siguiente:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace EmptyRecycleBin
{
    public partial class Form1 : Form
    {
        enum RecycleFlags : int
        {
            SHERB_NOCONFIRMATION = 0x00000001, // Don't ask for confirmation
            SHERB_NOPROGRESSUI = 0x00000001, // Don't show progress
            SHERB_NOSOUND = 0x00000004 // Don't make sound when the action is executed
        }

        [DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
        static extern uint SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath, RecycleFlags dwFlags);

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
               DialogResult result;
               result = MessageBox.Show("Quieres limpiar la papelera", "vaciar papelera", MessageBoxButtons.YesNo);
               // Si acepto, proceder a limpiar
               if (result == DialogResult.Yes)
               {
                    try
                    {
                         // Ejecutar el método creado previamente con los argumentos requeridos
                         uint IsSuccess = SHEmptyRecycleBin(IntPtr.Zero, null, RecycleFlags.SHRB_NOCONFIRMATION);
                         MessageBox.Show("La papelera ha sido vaciada satisfactoriamente", "Vaciar papelera de reciclaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    catch (Exception ex)
                    {   
                         // Manipular excepciones
                         MessageBox.Show("No se pudo vaciar la papelera: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                         Application.Exit();
                    }
               }
        }
    }
}

Que te diviertas !

Esto podría ser de tu interes

Conviertete en un programador más sociable