Borrar un archivo y enviarlo la papelera de reciclaje en C#
Borrar un archivo y enviarlo la papelera de reciclaje en C#
October 11, 2019
Las funciones de C# para borrar archivos y directorio sólo permiten eliminar los datos, no nos permiten enviarlos a la papelera de reciclaje.
Para borrar el archivo enviándolo a la papelera de reciclaje, debemos utilizar las funciones de la API, en concreto el método SHFileOperation.
Para ello, primero definimos las funciones y las constantes que se utilizan en la llamada a la API:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
public struct SHFILEOPSTRUCT
{
public IntPtr hwnd;
[MarshalAs(UnmanagedType.U4)]
public int wFunc;
public string pFrom;
public string pTo;
public short fFlags;
[MarshalAs(UnmanagedType.Bool)]
public bool fAnyOperationsAborted;
public IntPtr hNameMappings;
public string lpszProgressTitle;
}
[DllImport("shell32.dll", CharSet = CharSet.Auto)]
public static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp);
public const int FO_DELETE = 3;
public const int FOF_ALLOWUNDO = 0x40;
public const int FOF_NOCONFIRMATION = 0x10; // No pregunta al usuario
Una vez definidas las funciones y las constantes, se puede borrar el archivo o directorio enviándolo a la papelera de reciclaje de esta forma:
SHFILEOPSTRUCT shf = new Win32.SHFILEOPSTRUCT();
shf.wFunc = Win32.FO_DELETE;
shf.fFlags = Win32.FOF_ALLOWUNDO;
shf.pFrom = @"c:\archivo.txt" + '\0' + '\0';
Win32.SHFileOperation(ref shf);
El parámetro pFrom puede ser tanto un archivo como un directorio.