Type SearchRec=Record - раздел Транспорт, От автора Fill : Array[1..21] Of Byte;
Attr : Byte;...
Fill : Array[1..21] of Byte;
Attr : Byte;
Time : LongInt;
Size : LongInt;
Name : String[12];
End;
Здесь Attr - атрибут файла, Time - упакованное время создания файла, Size - размер файла в байтах, Name - имя файла, Fill - системное поле. Для распаковки времени создания файла служит процедура
4. Procedure UnpackTime(Time: LongInt; VarDT: DateTime) - распаковывает упакованное время Time и возвращает результат в записи DT, которая описана в модуле DOS так : Type DateTime =Record Year, Month, Day, Hour, Min, Sec: Word; End;
5. Procedure FindNext(VarF: SearchRec) - ищет следующий файл с атрибутами, заданными последним вызовом FindFirst. Процедуры FindFirst и FindNext возвращают через переменную
6. Var DosError : Integer
свой код завершения. Если значение этой переменной равно 0, процедура выполнилась успешно, в противном случае файл не был найден. Запишем программу, которая будет выводить на экран список файлов, имеющихся в текущей директории и всех ее поддиректориях.
Uses Dos;
Procedure Pass; {процедура выводит на экран полные имена всех файлов текущей директории и всех ее поддиректорий}
Var
R : SearchRec;
Dir : String;
Begin
GetDir(0,Dir); {определили полное имя текущей директории}
FindFirst('*.*',AnyFile,R); {ищем любой файл или директорию}
While DosError=0 Do With R Do Begin {пока файлы не кончились, продолжаем поиск}
If Attr And Directory=0 Then WriteLn(Dir+''+Name) {нашли файл}
Else {нашли директорию}
If Name[1]<>'.' Then Begin {это не директория '.' и не '..'}
ChDir(Name); {переходим в поддиректорию}
Pass; {ищем файлы в поддиректории}
ChDir('..'); {возвращаемся обратно}
End;
FindNext(R); {пытаемся найти еще какой-нибудь файл или директорию}
End;
End;
Begin
Pass;
End.
Процедура Pass в данной программе - рекурсивная, использование рекурсии в данной задаче естественно и позволяет сделать алгоритм очень простым и прозрачным, хотя, конечно, можно записать и нерекурсивный алгоритм. Более подробно рекурсивные алгоритмы и их применение мы рассмотрим позже.
Для поиска определенного файла на диске можно использовать функцию
7. Function FSearch(Name: PathStr; DirList: String): PathStr
Здесь Name - имя файла, возможно с добавлением пути (тип PathStrв модуле DOSопределен как String[79]); DirList - список директорий, разделенных символами “;”. Функция возвращает полное имя файла, если он найден, или пустую строку.
Еще две функции модуля DOS предназначены для получения информации о логических дисках:
8. Function DiskSize(Disk: Byte): LongInt - возвращает размер логического диска в байтах, параметр Disk задает номер логического устройства : 0 - текущий диск, 1 - диск A, 2 - диск B, 3 - дискC и т.д. Если задан неверный номер устройства, функция возвращает значение -1, этим обстоятельством можно воспользоваться, чтобы проверить наличие какого-либо диска в данном компьютере.
9. Function DiskFree(Disk: Byte): LongInt - возвращает размер свободного пространства на заданном диске в байтах.
Для работы с атрибутами и временем создания файлов можно использовать процедуры
10. Procedure GetFAttr(Varf; VarAttr: Word) - возвращает атрибут файла, связанного с файловой переменной f.
11. Procedure SetFAttr(Varf;Attr: Word) - заменяет атрибут файла, связанного с файловой переменной f, на значение Attr.
12. Procedure GetFTime(Varf; VarTime: LongInt) - возвращает упакованное время создания файла, связанного с файловой переменной f.
13. Procedure SetFTime(Varf;Time: LongInt) - изменяет время создания файла, связанного с файловой переменной f, на значение Time (время задается в упакованном виде). Для успешного выполнения всех четырех процедур необходимо, чтобы файл был инициализирован и существовал на диске, открыт он или нет - не важно. Переменная DosError возвращает результат выполнения каждой из этих процедур (DosError=0 при успешном выполнении).
B r... Теперь мы можем присвоить переменным их значения...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ:
Type SearchRec=Record
Что будем делать с полученным материалом:
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
От автора
Первое издание этой книги вышло в свет в 1997 году и довольно быстро стало библиографической редкостью. Автор несколько неожиданно для себя обнаружил, что книга пользуется черезвычайно высоким спро
Символьный тип данных
Для хранения символьной информации в Паскале предусмотрен специальный тип данных Char. Допустимы переменные, нетипизированные и типизированные константы такого типа. Данные типа
Caseвыражение Of
список значений : оператор/блок
..................................
список значений: оператор/блок
Процедуры и функции. Сфера действия описаний
В языке Паскаль (как вы уже поняли из предыдущего материала) существуют понятия процедуры и функции. Процедуры и функции можно определить как замкнут
Открытые массивы и нетипизированные параметры
Из предыдущего раздела мы узнали, что параметры подпрограмм описываются как [Var] имя : имя типа , это правда, но не вся правда - существует еще два
Множества
Понятие множества в Паскале очень близко к математическому определению: множество - это совокупность однотипных неиндексированных объектов. Множества
Графические средства языка Паскаль
Монитор персонального компьютера может работать в двух режимах - текстовом и графическом. Все, что мы делали до сих пор, мы делали в текстовом режиме. Текстовый экран содержит 2000 знако
Особенности вещественных вычислений
В отличие от целочисленных выражений, которые всегда вычисляются точно, вещественные выражения дают приближенный результат и вещественные переменные содержат приближенные значения. Это обстоятельст
Case тип Of
константа 1 : (описание поля);
константа 2 : (описание поля);
.....................
Модуль Crt
Crt - еще один стандартный модуль Паскаля, в котором содержатся разнообразные средства консольного ввода-вывода (то есть ввода с клавиатуры и вывода на текстовый экран). Процедуры
Var TextAttr : Byte
В ней содержится текущий цвет фона и цвет символов, используемые при выводе на экран процедурами Write иWriteLn. Изменив эту переменную, вы задаете новый
Другие средства обработки файлов и модуль DOS
Для того чтобы определить, есть ли на диске файл с заданным именем, удобно использовать уже известную нам стандартную функцию IOResult , которая возвращает ноль при успешном завершении последней оп
Процедурные типы
Язык Паскаль позволяет использовать в программе данные типа “процедура” или типа “функция”. Такие данные можно передавать как аргументы подпрограмм, можно описывать и использовать массивы процедур
Указатели и динамическая память
Указателями называются переменные и константы, значениями которых являются адреса. Различаются два вида указателей - обобщенные указатели и
Динамические структуры: списки, деревья
Примеры программ, использующих динамические массивы, приведенные в предыдущей главе, все еще были плохими. Для того чтобы использовать динамические массивы таким образом, мы должны заранее знать ра
Открытые строки
Открытыми строками, или длинными строками, или C-строками, называются символьные последовательности длиной до 65535 символов, ограниченные справа нуль-символ
Обработка программных прерываний
Программное прерывание - это ситуация, возникающая, когда дальнейшее выполнение программы невозможно. Например, деление на ноль, переполнение, ошибка Range check error, обращение по неверному адрес
Объекты
Объектом в языке Паскаль называется совокупность данных и подпрограмм, обрабатывающих эти данные. Программирование с использованием объектов называется объектно-о
Type имя типа=Object
описание полей описание методов End;
Поля объектов описываются так же, как поля записей, а описание метода - это заголовок процедуры или функции. Сами методы распол
Рекурсия и динамическое программирование
В этом и всех последующих разделах речь пойдет уже не о языке программирования Паскаль, а о задачах, которые вы можете решать с помощью этого языка, о наиболее интересных и полезных алгоритмах и пр
Рекурсия и стек отложенных заданий
Рекурсивные алгоритмы далеко не всегда неэффективны, как можно подумать, прочитав предыдущий раздел. Во многих задачах рекурсивные процедуры и функции очень полезны, кроме того, они исключительно п
Стеки и очереди
Значение стека как структуры данных в программировании не исчерпывается лишь стеком отложенных заданий. В этом разделе мы решим с помощью стека задачу о вычислении значения арифметического выражени
Комбинаторные алгоритмы
В этом разделе мы рассмотрим три наиболее важные задачи комбинаторики: нахождение всех подмножеств множества из n элементов; нахождение всех выборок по m элементов из n элементов и нахождение всех
Бинарные деревья
В этом разделе мы рассмотрим различные алгоритмы обхода бинарного дерева. К алгоритмам создания бинарного дерева мы обратимся несколько позже, а пока будем считать, что дере
Алгоритмы сортировки
В этом разделе мы рассмотрим различные алгоритмы решения задачи сортировки. Задача сортировки ставится следующим образом: дана последовательность записей R1,R
Хотите получать на электронную почту самые свежие новости?
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Новости и инфо для студентов