![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
удаление файлов [D7, XP]
rosl © (2007-06-14 02:54:00)как удалить файлы из каталога, созданные более недели назад?
Arm79 (2007-06-14 20:17:00) [1]
procedure TLogWriter.RotateLogs;
var
i : integer;
OldName, NewName : PChar;
dTemp, dCurrent : Cardinal;
stTemp : SYSTEMTIME;
FileTime : ^TFileTime;
SearchRec : TSearchRec;
FileAttrs : Integer;
begin
if not FOpened
then raise Exception.Create('Â çàêðûòîì ñîñòîÿíèè ðîòàöèÿ ëîãîâ íåâîçìîæíà...');
Lock;
with TStringList.Create do
begin
FileAttrs := faAnyFile-faDirectory-faVolumeID-faSysFile;
if FindFirst(Format('%s*.log', [FLogDir]), FileAttrs, SearchRec) = 0
then begin
GetMem(FileTime, SizeOf(TFileTime));
FileTime^ := SearchRec.FindData.ftLastWriteTime;
AddObject(SearchRec.Name, TObject(FileTime));
while FindNext(SearchRec) = 0 do
begin
GetMem(FileTime, SizeOf(TFileTime));
FileTime^ := SearchRec.FindData.ftLastWriteTime;
AddObject(SearchRec.Name, TObject(FileTime));
end; // while FindNext(SearchRec) = 0 do
SysUtils.FindClose(SearchRec);
end; // if FindFirst(Format('%s*.log', [FLogDir]), FileAttrs, SearchRec) = 0
if Count > 0
then begin
for i := 0 to Count - 1
do begin
FileTime := Pointer(Objects[i]);
FileTimeToSystemTime(FileTime^, stTemp);
// íàì íóæåí âñåãî ëèøü äåíü ìîäèôèêàöèè
dTemp := Trunc(SystemTimeToDateTime(stTemp));
dCurrent := Trunc(Now);
if (dCurrent - dTemp) >= FLogAge
then begin
// îïåðàöèè êîïèðîâàíèÿ ìîãóò áûòü âåñüìà ïðîäîëæèòåëüí 251;
// îïåðàöèè ïåðåìåùåíèÿ òîæå â ñëó÷àå ïåðåìåùåíèÿ íà äðóãèå ðàçäåëû.
OldName := PChar(FLogDir + Strings[i]);
NewName := PChar(FBackupDir + Strings[i]);
case RotateAction of
raNone:
begin
// íè÷åãî íå äåëàåì
end;
raDelete:
begin
DeleteFile(OldName);
end;
raCopy:
begin
if FileExists(NewName)
then DeleteFile(NewName);
CopyFile(OldName, NewName, False);
end;
raMove:
begin
if FileExists(NewName)
then DeleteFile(NewName);
MoveFile(OldName, NewName);
end;
end;
if Assigned(FRotateLogs)
then FRotateLogs(Self, Strings[i], RotateAction);
end; // if (dCurrent - dTemp) > FLogAge
FreeMem(Pointer(Objects[i]), SizeOf(TFileTime));
end; // for i := 0 to Count - 1
Clear;
Free;
end; // if Count > 0
end; // with slTemp do
UnLock;
end;
Riply (2007-06-14 03:41:00) [2]> [2] rosl (14.06.07 03:25)
FindFirst, FindNext, FindClose
В структуре TSearchRec есть параметр Time (если правильно помню)
Пример есть в Help-е
Германн (2007-06-14 03:34:00) [3]
> Riply © (14.06.07 03:19) [1]
>
> Так же, как и созданные сегодня :)
>
+1
Прошлые сутки "Плохиш" много раз пытался наставить на путь истинный хоть кого-то :(((
И всяк "Самаритяне" давали "разжёванное". Как правило "недопережёвыванное". А "отрыжку" относили на авось.
:)
rosl (2007-06-14 03:25:00) [4]вот я и спрашиваю КАК? как определить дату создания файла? и ка его потом удалить?
Riply (2007-06-14 03:19:00) [5]Так же, как и созданные сегодня :)