Блог инженера-программиста / шапку скоро поменяю /

Pascal: вывод списка файлов с фильтром

Срочно понадобилось написать программу (на Pascal), которая должна выводить все файлы указанного каталога, которые созданные между указанными датами. Сначала это показалось мне тривиальной задачей, однако, оказалось, это не так.

Дословно задача звучит так: Разработать программу, которая в корневом каталоге дискеты находит файлы, созданные в июне 2010 года.

Так как работаю на ноутбуке и дискеты нет, тестировал на корневом каталоге системного диска C:.

Вот сам код программы, который решает эту задачу.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Uses SysUtils,crt;
Var Info : TSearchRec;
    Count : Longint;
    SearchPath:string='C:\';
    Ft:TDateTime;
Begin
  clrscr;
  Count:=0;
  writeln('Search for files:');
  If FindFirst (SearchPath+'*',faAnyFile and (not faDirectory),Info)=0 then
  Repeat
    With Info do
    begin
      Ft:=FileDateToDateTime(Time);
      if (Ft >= StrToDateTime('01.06.2010')) and
         (Ft < strtodatetime ('01.07.2010')) then
      begin
        writeln(name:25, size:15, DateTimeToStr(Ft):25);
        inc(Count);
      end;
    end;
  Until FindNext(info) <> 0;
  FindClose(Info);
  Writeln ('Finished search. Found ',Count,' matches');
End.

Для приведения даты создания файла к формату TDateTime используется функция FileDateToDateTime.

В результате работы программа выводит список файлов, созданных в июне 2010 года. Несложно изменить код программы, чтоб осуществлялся поиск файлов в указанном каталоге, созданных в любое указанное пользователем время.

Также можно использовать произвольные фильтры и комбинации фильтров для поиска файлов (второй параметр в переменной FindFirst). Возможные атрибуты файлов, которые допустимы при поске:

1
2
3
4
5
6
7
faAnyFile: Любой файл
faReadOnly: Файлы nолько для чтения
faHidden: Скрытые файлы
faSysFile: Системные файлы
faVolumeID: файлы идентификатора объема
faDirectory: Файлы каталоги
faArchive: Архивные файлы

Комментирование закрыто.