PDA

Ver la Versión Completa : Borrar los archivos mas antiguos


horacio_arg
26-02-2007, 01:58:22
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:

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:

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;