Delphi: удаление файлов в каталоге старше X дней и / или имеющем специальную маску файла (* .xxx) - PullRequest
0 голосов
/ 23 января 2019

Язык: Delphi 10.1 Berlin

Проблема:
Существует каталог с файлами измерений (*.csv) и другими файлами.
Каждые несколько часовБудет создан новый файл измерений.
Мне нужна возможность удалить все .csv файлы в этой папке, которые старше определенного количества дней.Все остальные типы файлов не должны быть затронуты.

Вопрос:
Есть ли в Delphi встроенная функция для выполнения этой работы?Если нет, то как эффективно решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 23 января 2019
procedure DeleteFilesOlderThan(
  const Days: Integer;
  const Path: string;
  const SearchPattern: string = '*.*');
var
  FileName: string;
  OlderThan: TDateTime;
begin
  Assert(Days >= 0);
  OlderThan := Now() - Days;
  for FileName in TDirectory.GetFiles(Path, SearchPattern) do
    if TFile.GetCreationTime(FileName) < OlderThan then
      TFile.Delete(FileName);
end;
0 голосов
/ 23 января 2019

Я не нашел встроенную функцию Delphi для этой конкретной проблемы.
Эта функция работала для меня:

function TUtilities.DeleteFilesOlderThanXDays(
    Path: string;
    DaysOld: integer = 0; // 0 => Delete every file, ignoring the file age
    FileMask: string = '*.*'): integer;
var
  iFindResult : integer;
  SearchRecord : tSearchRec;
  iFilesDeleted: integer;
begin
  iFilesDeleted := 0;
  iFindResult := FindFirst(TPath.Combine(Path, FileMask), faAnyFile, SearchRecord);
  if iFindResult = 0 then begin
    while iFindResult = 0 do begin
      if ((SearchRecord.Attr and faDirectory) = 0) then begin
        if (FileDateToDateTime(SearchRecord.Time) < Now - DaysOld) or (DaysOld = 0) then begin
          DeleteFile(TPath.Combine(Path, SearchRecord.Name));
          iFilesDeleted := iFilesDeleted + 1;
        end;
      end;
      iFindResult := FindNext(SearchRecord);
    end;
    FindClose(SearchRecord);
  end;
  Result := iFilesDeleted;
end;
...