Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   buscar archivos con mascara y por fecha de creación (https://www.clubdelphi.com/foros/showthread.php?t=71959)

tgsistemas 20-01-2011 21:03:29

buscar archivos con mascara y por fecha de creación
 
Hola a tod@s,

llevo toda la tarde mirando el truco 15, el truco 63 y el truco 72 pero no consigo entender del todo las diferentes funciones :confused::confused:

Quiero desarrollar una aplicación que busque en un directorio todos los ficheros con que cumplan estas 3 condiciones :
  • máscara = *.rar
  • fecha de creación < (fecha del sistema - 30 días)
  • fecha de creación <> final de mes

Como es obvio, se trata de automatizar la limpieza de un directorio contenedor de backup de ficheros en rar conservando siempre los últimos 30 días y todos los finales de mes anteriores.

He estado probando los ejemplos de los trucos pero no he sido capaz de crear un proceso que busque los archivos con las tres condiciones indicadas, por eso os pido ayuda de si es posible hacerlo y por dónde empezar.

Saludos a tod@s y muchas gracias

ecfisa 21-01-2011 04:40:27

Hola tgsistemas.

Probá este procedimiento:
Código Delphi [-]
...
uses DateUtils;

procedure DepurarArchivos(const Ruta, Ext: string);

  function GetFileDateTime(Nombre: string): TDateTime;
  var
    Hnd: integer;
  begin
    Hnd := FileOpen(Nombre, 0);
    try
      Result:= FileDateToDateTime(FileGetDate(Hnd));
    finally
      FileClose(Hnd);
    end;
  end;

var
  SR: TSearchRec;
  dt: TDateTime;
begin
  if FindFirst(Ruta + Ext,  faArchive , SR) = 0 then
  begin
    repeat
      dt:= GetFileDateTime(Ruta + SR.Name); // obtener fecha ultima modificación
      if (DaysBetween(dt, Now) > 30) and    // si tiene más de 30 días 
         (DayOf(dt) <> DaysInAMonth(YearOf(dt), MonthOf(dt))) then  // y no es fin de mes
       DeleteFile(Ruta + SR.Name);
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

Ejemplo de llamada:
Código Delphi [-]
     DepurarArchivos('C:\TEMPORAL\','*.RAR');

Edito:
En mis pruebas funcionó bién, pero como se trata de borrado de archivos, realizá tus pruebas reemplazando la línea
Código Delphi [-]
DeleteFile(Ruta + SR.Name);
por
Código Delphi [-]
Form1.Memo1.Lines.Add(Ruta + SR.Name)

Un saludo.

tgsistemas 21-01-2011 09:25:14

gracias ecfisa lo he probado y parece que funciona perfectamente :D:D:D

muuchas gracias


La franja horaria es GMT +2. Ahora son las 14:29:29.

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