Вопрос № 40944: Здравствуйте!!! Я написал программу, осуществляющую поиск файлов в текущем каталоге, имеющих расширение pas и вычисление их суммарного размера, но она не запускается, выбивает курсор на TSearchRec (Unknow indentifier), программу я списал из книги...
Вопрос № 40.944
Здравствуйте!!! Я написал программу, осуществляющую поиск файлов в текущем каталоге, имеющих расширение pas и вычисление их суммарного размера, но она не запускается, выбивает курсор на TSearchRec (Unknow indentifier), программу я списал из книги
Приложение:
Отправлен: 21.04.2006, 16:51
Вопрос задал: ataman (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Boriss
Здравствуйте, ataman!
Таки она у Вас не "выбивает", а НЕ НАХОДИТ! Нужно поключить модуль WinDOS - там описана TSearchRec
--------- Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор) Россия, Саранск Организация: факультет Электронной техники, Мордовский госуниверситет Адрес: г. Саранск WWW:Программирование на Паскале ---- Ответ отправлен: 21.04.2006, 17:14 Оценка за ответ: 5 Комментарий оценки: Я так и знал!!! но на WinDOS он у меня выбивает
Отвечает: Форсман Павел Вячеславович
Здравствуйте, ataman!
Дело в том, что допущена ошибка в первой строке. Выглядеть она должна вот так
uses WinDos,Crt;
Тогда все заработает. Хотя я бы предложил другой вариант, используя модуль DOS (см. приложение).
Немного об аргументах в процедуре FindFirst(Path:String; Attr:byte; var Search:SearchRec) - обратите внимание, что буквы "T" в начале описания типа там нет.
Итак Path - это маска. Здесь действуют все правила описания масок DOS, поэтому конкретизировать это не будем.
Attr - набор атрибутов файла для поиска.
Биты с 0 по 5 в параметре Byte описывают следующие аттрибуты:
Бит Dos WinDos Описание
0 ReadOnly faReadOnly Только чтение
1 Hidden faHidden Скрытый
2 SysFile faSysFile Системный
3 VolumeID faVolumeID Идентификатор тома (метка)
4 Directory faDirectory Подкаталог
5 Archive faArchive Архивный
Для выборки по файлам с разными аттрибутами можно комбинировать данные константы. Например, если нужно найти все скрытые и/или файлы только для чтения, то Attr:=ReadOnly+Hidden (DOS) или Attr:=faReadOnly+faHidden (WinDOS)
Таким образом действует принцип OR, т. е. файл считается "подходящим", если совпадает хотя бы один из атрибутов.
Помимо указанных констант существует константа 3Fh - (AnyFile, faAnyFile (WinDos) - все файлы). Еще одна особенность - в DOS - Attr имеет тип byte, а в WinDos - описана как Word.
Далее опишу тип SearchRec. Буду описывать исходя из синтаксиса модуля DOS, т. к. описание этого типа в WinDos отличается только буквой T в начале имени типа:
Итак:
SearchRec=record
Fill:array [1..21] of byte; {Служебная информация ОС - зарезервировано}
Attr:byte; {WinDos - Word. - Атрибуты найденного файла}
Time:Longint; {Время создания или последнего изменения файла - представлено в упакованном формате}
Size:Longint; {Размер - в байтах}
Name:String[12]; {Имя и расширение файла}
end;
Для получения даты и времени используется процедура UnPackTime(Time:Longint; var T:DateTime), где Time - полученное время, T:DateTime описана следующим образом:
Datetime=record
year:Word; {Две последних цифры года}
month:Word; {Месяц 1..12}
day:Word; {День 1..31}
hour:Word; {Час 0..23}
min:Word; {Минуты 0..59}
sec:Word; {Секунды 0..59}
На основании этой информации можно также настроить существующую задачу на более сложные условия поиска. По поводу поля Fill в SearchRec - на мой взгляд, это скорее всего служебная информация для поиска следующего файла, ведь в FindNext мы уже столько аргументов не задает, следовательно они где-то должны храниться.
Удачи!!!
С уважением Форсман.
Приложение:
--------- Научить нельзя, но можно попробовать научиться!!!