Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Borrar los archivos de un directorio (y subdirectorios de este) (https://www.clubdelphi.com/foros/showthread.php?t=80418)

dec 02-02-2007 14:07:23

Borrar los archivos de un directorio (y subdirectorios de este)
 
La siguiente función permite borrar los archivos de un directorio "recursivamente", esto es, borrar los archivos de un directorio y de los subdirectorios de este directorio y así sucesivamente.

-prueba

Código Delphi [-]
uses
  SysUtils;

function BorrarArchivos(const directorioRaiz, extension: string;
  const borrarRecursivamente, podraDeshacerse: boolean) : boolean;

  function Borrar(const directorios: string) : boolean;
  var
    opciones: Word;
    operacion: TSHFileOpStruct;
  begin
    FillChar(operacion, SizeOf(operacion), #0);
    opciones := FOF_MULTIDESTFILES or
      FOF_NOCONFIRMATION or FOF_SILENT;
    if (podraDeshacerse) then
      opciones := opciones or FOF_ALLOWUNDO;
    operacion.wFunc := FO_DELETE;
    operacion.fFlags := opciones;
    operacion.Wnd := GetDesktopWindow;
    operacion.pFrom := PChar(directorios);
    result := (ShFileOperation(operacion) = 0);
  end;

var
  sDirs: string;
  SR: TSearchRec;
begin
  result := false;
  sDirs := EmptyStr;
  if not DirectoryExists(directorioRaiz) then
    Exit;
  if borrarRecursivamente then
  begin
    sDirs := directorioRaiz +'\*.'+ extension +#0;
    FindFirst(directorioRaiz +'\*.*', faDirectory, SR);
    repeat
      if ((SR.Attr and faDirectory) = faDirectory)
        and (SR.Name <> '.') and (SR.Name <> '..') then
          sDirs := sDirs + directorioRaiz +'\'+ SR.Name +'\*.'+ extension +#0;
    until (SysUtils.FindNext(SR) <> 0);
    SysUtils.FindClose(SR);
    Result := Borrar(sDirs);
  end
  else // Borrar solo archivos del directorio raiz
    Result := Borrar(directorioRaiz +'\*.'+ extension +#0);
end;

manolop 12-02-2007 12:55:18


Yo la estoy usando pero me genera un error que no puedo controlar. El error lo da que al borrar los directorios parece que intenta eliminar 2 veces una carpeta y genera un error, que pese a que el resultado el correcto e intento capturarlo con un try..except no lo captura y lo muestra al usuario. Alguien esta en la misma situación, pq le estoy dando vueltas pero no lo consigo arreglar. Un saludo y gracias de antemano.


La franja horaria es GMT +2. Ahora son las 21:55:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi