Срочно понадобилось написать программу (на 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: Архивные файлы |