Borrar un fichero enviándolo a la papelera de Windows

5082 vistas

DeleteFile (de la unidad SysUtils) borra un fichero de forma definitiva. Pero a veces nos puede interesar no borrar definitivamente ese fichero y enviarlo a la papelera de reciclaje de Windows (estilo a lo que sucede desde el Explorador de Windows). Esto lo conseguiremos con el código siguiente:



delphi
  1. function DeleteFileToRecycleBin(AFileName: string ) : boolean;
  2. var
  3.   fos: TSHFileOpStruct;
  4. begin
  5.   FillChar(fos, SizeOf(fos),0);
  6.   with fos do
  7.   begin
  8.     Wnd    := Application.Handle;
  9.     wFunc  := FO_DELETE;
  10.     pFrom  := PChar(AFileName);
  11.     fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT;
  12.   end;
  13.   result := (0 = ShFileOperation(fos));
  14. end;



Algunos ejemplos de llamadas



delphi
  1. if not DeleteFileToRecycleBin('c:\kk\Fichero.txt') then
  2.   ShowMessage('No se pudo borrar el fichero');
  3.  
  4. // Con una sóla llamada podemos tambien borrar más de un fichero
  5. if not DeleteFileToRecycleBin('c:\kk\Fichero1.txt'+#0+'c:\windows\Fichero2.txt') then
  6.   ShowMessage('No se pudo borrar el fichero');
  7.  
  8. // Podemos borrar incluso una carpeta
  9. DeleteFileToRecycleBin('c:\UnDirectorio');



Nota: recordar añadir la unidad ShellApi en el uses del formulario