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;
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.