Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Borrar los archivos mas antiguos (https://www.clubdelphi.com/foros/showthread.php?t=40749)

horacio_arg 26-02-2007 01:58:22

Borrar los archivos mas antiguos
 
Hola:
Estoy desarrollando una aplicacion que graba imagenes provenientes de camaras IP, y para asegurarme de no quedarme sin espacio en disco, al llegar a cierto limite deberia borrar los archivos mas viejos, por ejemplo los 10 mas antiguos para liberar XX Megas.
No encuentro la forma de detectar los N archivos mas viejos en un directorio para poder borrarlos .... Agradezco cualquier sugerencia
Gracias Horacio

seoane 26-02-2007 03:11:34

Lo primero que se me ocurre es buscar los archivos y ordenarlos por la fecha de modificacion. Una vez ordenados, borrar los 10 ultimos resulta sencillo.

Para ordenar los archivos vamos a utilizar el metodo CustomSort del objeto TStringList, que utiliza el algoritmo de ordenamiento Quicksort. La funcion que realiza la busqueda quedaria mas o menos asi:
Código Delphi [-]
function Comparar(List: TStringList; Index1, Index2: Integer): Integer;
begin
  // Para cambiar de orden descendente a ascendente intercambiar Index1 y Index2
  Result:= Integer(List.Objects[Index2]) - Integer(List.Objects[Index1]);
end;

procedure Buscar(Path,Mask: string; Attr: Integer; Lista: TStringList);
var
  SearchRec: TSearchRec;
begin
  if Copy(Path,Length(Path),1) <> '\' then
    Path:= Path + '\';
  if FindFirst(Path + Mask,Attr,SearchRec) = 0 then
  repeat
    Lista.AddObject(Path + SearchRec.Name, TObject(SearchRec.Time));
  until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
  Lista.CustomSort(Comparar);
end;

Ahora, como ya dije, solo nos falta eliminar los 10 primeros archivos de la lista:
Código Delphi [-]
var
  i: integer;
  Lista: TStringList;
begin
  Lista:= TStringList.Create;
  try
    Buscar('C:\Prueba','*.*',faArchive,Lista);
    i:= 10;
    while (Lista.Count > 0) and (i > 0 ) do
    begin
      DeleteFile(Lista[0]);
      Lista.Delete(0);
      dec(i);
    end;
  finally
    Lista.Free;
  end;
end;


La franja horaria es GMT +2. Ahora son las 01:32:39.

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