Лекция 25.ppt
- Количество слайдов: 20
Типы файлов, объявление, логическая и физическая организация файловой системы, процедуры и функции обработки файлов. Нетипизированные файлы, их назначение и использование
Типы файлов Под файлом понимается либо именованная область внешней памяти ПК, либо логическое устройство — потенциальный источник или приемник информации. Любой файл имеет три характерные особенности: • у него есть имя, что дает возможность программе работать одновременно с несколькими файлами; • он содержит компоненты одного типа (или тип его компонентов не оговаривается). • длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти.
Некоторые сведения о файловой системе В любой операционной системе информация на диске хранится в виде файлов, а система хранения информации называется файловой системой. Имя файла состоит из двух частей: собственно имени и его расширения. Имя может содержать от 1 до 8 символов в DOS, в Windows — до 255 символов. Расширение отделяется от имени точкой и характеризует тип файла. Для регистрации имен файлов в файловой системе компьютера используются каталоги. Каталог — это поименованная область на диске. Имя каталога подчиняется тем же правилам, что и имя файла. Каждый каталог может содержать файлы и вложенные каталоги более низкого уровня.
Каждый диск обязательно имеет свой главный (корневой) каталог, в котором зарегистрированы файлы пользователя и подкаталоги первого уровня, а в них — другие файлы пользователя и подкаталоги второго уровня, и т. д. Корневой каталог нельзя удалить. Он не имеет имени и обозначается знаком "". Например, С: — это корневой каталог диска С: . Все прочие каталоги диска вложены в корневой. Так формируется древовидная, или иерархическая структура каталогов. Каталог, с которым в настоящий момент времени работает пользователь, называется текущим. До начала работы жесткого диска компьютера над ним выполняется операция форматирования. При этом поверхность диска разбивается на дорожки и секторы, а также создается служебная область и пустой корневой каталог.
Каждый каталог содержит сведения обо всех своих файлах и вложенных каталогах, а также информацию о вышестоящем каталоге (вместо имени используется обозначение. . ) и себе самом (вместо имени используется одна точка). Кроме имени и расширения файла или каталога для них хранятся такие характеристики: • размер в байтах (только для файлов); • дата и время создания файла или каталога (для файлов хранится и дата последнего изменения); • специальные признаки, или атрибуты файла: "только для чтения", "скрытый", "системный" и "архивный". • физический адрес файла или каталога на диске.
Для того чтобы программа смогла найти нужный файл, необходимо знать путь или маршрут, "ведущий" к файлу. Путь — это перечень имен подкаталогов, отделенных друг от друга обратной косой чертой, которые нужно последовательно пройти для того, чтобы отыскать нужный файл. Обычно путь начинается с имени диска, которое заканчивается символом двоеточия. Последним в пути указывается имя файла: • Диск: Имя. Подкаталога 1. . . Имя. Подкаталога. NИмя. Файла • D: BPBGIpp 1. pas Путь к файлу называют также полным именем файла. Если буква и следующее за ней двоеточие отсутствуют, то подразумевается используемый в настоящее время диск. Если путь к файлу начинается с обратной косой черты, то поиск файла начинается с корневого каталога диска.
Понятие файла достаточно широко. Это может быть обычный файл на диске, коммуникационный порт ЭВМ, устройство печати, клавиатура или другие устройства. Файлы на внешних устройствах часто называют физическими файлами. Стандартные аппаратные средства ПК, такие как клавиатура, экран дисплея, печатающее устройство и коммуникационные каналы ввода-вывода называются логическими устройствами. Турбо Паскаль поддерживает три файловых типа: • текстовые файлы; • типизированные файлы; • нетипизированные файлы.
Доступ к файлу в программе происходит с помощью переменных файлового типа. Переменную файлового типа описывают одним из трех способов: • Имя. ФП: TEXT; • Имя. ФП: FILE OF тип элементов; • Имя. ФП: FILE; где тип элементов — любой тип, кроме файлов. type product = record name : String; cost : integer; end; textf = file of String[50]; var fl : file of char; f 2 : text; f 3 : file; f 4 : textf; f 5 : file of product;
Доступ к файлам В любой момент времени программе доступен только один элемент файла, на который ссылается указатель текущей позиции файла (указатель обработки). Он определяет то место в файле, откуда (куда) происходит чтение (запись) данных. При открытии или создании файла указатель помещается в его начало. Чтение или запись данных из файла вызывает автоматическое перемещение указателя.
По способу доступа к элементам различают файлы последовательного и прямого доступа. • Файлом последовательного доступа называется файл, к элементам которого доступ выполняется в той же последовательности, в какой они записывались. Для поиска нужного элемента в этом случае необходимо перемещать указатель обработки до тех пор, пока он не будет помещен на искомый элемент. Для таких файлов запрещено совмещение чтения и записи данных. • Файл прямого доступа — это файл, доступ к элементам которого осуществляется по их адресу (номеру). При поиске нужного элемента достаточно указать номер его позиции, что существенно ускоряет процесс. Для файла прямого доступа допустимо совмещение записи и считывания данных.
Процедуры и функции для работы с файлами Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре ASSIGN: • ASSIGN (F, name); Здесь F — файловая переменная; name — строка, содержащее имя файла или логического устройства.
После связывания логического файла с физическим его необходимо открыть для чтения или записи с помощью одной из процедур: • RESET(F) При выполнении этой процедуры дисковый файл или логическое устройство подготавливается к чтению информации. В результате специальная переменнаяуказатель, связанная с этим файлом, будет указывать на начало файла, т. е. на компонент с порядковым номером 0. Если файл типизированный или нетипизированный, то процедурой reset он открывается для чтения и записи одновременно. • REWRITE (F) Процедура Rewrite открывает (создаёт) файл для записи, подготавливая его к заполнению с нулевого элемента. Повторный вызов Rewrite (или попытка открыть с помощью этой процедуры существующий файл) приводит к стиранию текущего содержимого файла.
• CLOSE (F) Закрывает файл, однако связь файловой переменной с именем файла, установленная ранее процедурой ASSIGN, сохраняется. Если процедура Close не будет выполнена, файл будет создан на внешнем устройстве, но содержимое последнего буфера в него не будет перенесено. • RENAME (F, new. Name) Переименовывает файл. Здесь new. Name — строковое выражение, содержащее новое имя файла. ERASE (F) • Уничтожает физический файл на диске. Процедуры переименования и удаления применяются только к закрытым файлам! • Функция EOF (F) Логическая функция, возвращает TRUE, если файловый указатель стоит в конце файла.
• Функция IORESULT: WORD. Возвращает целое число, соответствующее коду последней ошибки ввода-вывода. Если операция завершилась успешно, функция возвращает ноль. IORESULT становится доступной только при отключенном автоконтроле ошибок ввода-вывода. Директива компилятора {$I-} отключает, а директива {$I+} включает автоконтроль. Если автоконтроль отключен, а операция ввода-вывода привела к возникновению ошибки, устанавливается флаг ошибки и все последующие обращения к вводу-выводу блокируются, пока не будет вызвана функция IORESULT. • FLUSH (F) Принудительно записывает данные из буфера в файл независимо от степени его заполнения. Процедура игнорируется, если файл был инициирован для чтения процедурой RESET.
Процедуры для работы с каталогами • CHDIR (<путь>) Изменение текущего каталога. Здесь <путь> — строковое выражение, содержащее путь к устанавливаемому по умолчанию каталогу. • GETDIR (<устройство>, <каталог>) Позволяет определить имя текущего каталога (каталога по умолчанию). Здесь <устройство> - выражение типа WORD , содержащее номер устройства: 0 - устройство по умолчанию, 1 — диск А, 2 — диск В и т. д. ; <каталог> — переменная типа STRING, в которой возвращается путь к текущему каталогу на указанном диске.
• MKDIR (<каталог>) Создает новый каталог на указанном диске. Здесь <каталог> — выражение типа STRING, задающее путь к каталогу. Последним именем в пути, т. е. именем вновь создаваемого каталога не может быть имя уже существующего каталога. • RMDIR (<каталог>) Удаляет каталог. Удаляемый каталог должен быть пустым, т. е. не содержать файлов или имен каталогов нижнего уровня. Ряд полезных файловых процедур и функций становится доступным при использовании библиотечного модуля DOS.
Нетипизированные файлы объявляются как файловые переменные типа FILE и отличаются тем, что для них не указан тип компонентов. Отсутствие типа делает эти файлы, с одной стороны, совместимыми с любыми другими файлами, а с другой — позволяет организовать высокоскоростной обмен данными между диском и памятью. Открытие нетипизированного файла: • Reset(F, Buf. Size) • Rewrite(F, Buf. Size) Параметр Buf. Size (WORD) задает число байтов, считываемых из файла или записываемых в него за одно обращение. Минимальное значение Buf. Size - 1 байт, максимальное - 64 Кбайт. Если Buf. Size не указан, то по умолчанию он принимается равным 128 байт.
При работе с нетипизированными файлами могут применяться все процедуры и функции, доступные типизированным файлам, за исключением READ и WRITE, которые заменяются соответственно высокоскоростными процедурами BLOCKREAD и BLOCKWRITE. • Block. Read(F, X, N, NN); Эта процедура осуществляет чтение в переменную X N блоков, при этом длина блока равна длине буфера. N>=1. За одно обращение нельзя прочесть больше, чем 64 К байтов. Необязательный параметр NN возвращает число блоков, прочитанных текущей операцией Block. Read. В случае успешного завершения операции чтения NN=N, в случае аварийной ситуации параметр NN будет содержать число удачно прочитанных блоков. • Block. Write(F, X, N, NN); Эта процедура осуществляет за одно обращение запись из переменной X N блоков, при этом длина блока равна длине буфера.
• SEEK (F, NKomp) Смещает указатель файла к требуемому компоненту. Здесь NKomp — выражение типа LONGINT, указывающее номер компонента файла. Первый компонент файла имеет номер 0. Функция FILESIZE (F) Возвращает значение типа LONGINT, которое содержит количество компонентов файла. Чтобы переместить указатель в конец типизированного файла, можно написать: seek (F, File. Size(F)). Функция FILEPOS (F). Возвращает значение типа LONGINT, содержащее порядковый номер компонента файла, который будет обрабатываться следующей операцией ввода-вывода. Нельзя использовать для текстовых файлов!
Домашнее задание • 1. Составить опорный конспект лекции по теме «Типы файлов, логическая и физическая организация файловой системы, процедуры и функции обработки файлов. Нетипизированные файлы» на основе презентации. • 2. Программирование на языке Pascal. Рапаков Г. Г. , Ржеуцкая С. Ю. СПб. : БХВ-Петербург, 2004, cтр. 306316, 335 -339.
Лекция 25.ppt