Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

1.2.2. Текстовые файлы. 1.2.3. Нетипизированные файлы. 1.2.4. Связывание логического и физического файлов. 1.2.5. Открытие файла




1. 2. 2. Текстовые файлы

Структура текстовых файлов отличается от структуры обычных файлов (линейная последовательность элементов одного типа) тем, что содержимое текстового файла рассматривается как последовательность символьных строк переменной длины, разделенных специальной комбинацией, называемой «конец строки». Как правило, эта комбинация строится из управляющего кода «возврат каретки», за которым, возможно, следует управляющий код «перевод строки».

Представителем текстового файла в программе является

переменная файлового типа, которая должна быть описана с указанием стандартного типа text.

Например, VAR Text_Inf: text;

1. 2. 3. Нетипизированные файлы

Для нетипизированных файлов тип не устанавливается. Соответствующие переменные описываются с помощью служебного слова file (без of).

Например, VAR Data: file;

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

 

1. 2. 4. Связывание логического и физического файлов

Для установления связи между конкретным физическим файлом на магнитном носителе и переменной файлового типа предназначена процедура Assign:

               AssignFile (f, < имя файла> ),

где f - переменная любого файлового типа, < имя файла> - имя физического файла.

 

1. 2. 5. Открытие файла

Для поиска файла на внешнем носителе, образования специальных системных буферов для обменов с ним и установки текущего указателя файла на его начало предназначены процедуры Reset и Rewrite.

Для открытия существующего файла используется процедура

                      Reset(f),

а для создания и открытия нового файла - процедура

                     Rewrite(f).

При описании обеих процедур параметр f означает файловую переменную некоторого типа.

При попытке создать и открыть новый файл с именем уже существующего на диске набора данных действие процедуры Rewrite сведется к удалению этого набора и созданию нового пустого файла с тем же именем.

Открытие внешнего файла с помощью процедуры Reset в случае отсутствия его на диске может привести к ошибке. Ошибочные ситуации при работе с файлами позволяет отслеживать специальная функция, формат вызова которой:

                       IOresult.

Данная функция возвращает целое число, соответствующее коду последней ошибки в операции. Если же операция прошла без сбоев, то функция IOresult вернет значение 0. Опросить функцию IOresult можно только один раз после каждой операции, т. к. она обнуляет свое значение при каждом вызове.

Коды ошибок, возвращаемые функцией IOresult, приведены в таблице.

 

Код Описание ошибок

I. Ошибки, возникающие при открытии файлов

Физический файл, связанный с файловой переменной, не найден или не существует                                        
Имя файла на диске, связанное с файловой переменной, является неправильным или указывает на несуществующий подкаталог
Программа имеет слишком много открытых файлов
Физический файл является каталогом или файлом, доступным только для чтения. В операторе REWRITE эта ошибка также возникает, когда в каталоге нет свободного места

II. Программные ошибки, возникающие при работе с файлами

Попытка считывания после конца файла
Ошибка записи на диск
Логический файл не связан с физическим
Файл не открыт
Попытка прочитать информацию из текстового файла, не открытого для чтения
Файл не открыт для вывода

III. Аппаратные ошибки, возникающие при работе с файлами

Диск защищен от записи
Дисковод не готов
При запросе к диску указана неверная длина структуры
Ошибка при операции позиционирования головок на диске
Сектор на диске не найден
Ошибка при записи на устройство
Ошибка при чтении с устройства
Сбой аппаратуры

 

В следующей программе приведен пример использования функции IOResult. Требуется определить факт наличия файла File. txt на диске и выдать его размер в байтах.

Для этого на форму поместили компонент TEdit с именем по умолчанию Edit1, написали обработчик событий на нажатие на компонет кнопкой мыши. После на этом компоненте должна отразиться искомая информация.

 

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

 

type

TForm1 = class(TForm)

Edit1: TEdit;

 procedure Edit1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

FF: file of string[30];

implementation

 

{$R *. dfm}

 

procedure TForm1. Edit1Click(Sender: TObject);

var

Err: byte;

begin

AssignFile(ff, 'File. txt');

{$I-}

Reset(ff);

{$I+}

Err: =IOResult;

if (Err = 2) or (Err = 3) then

Edit1. Text: = 'Файл не найден';

if Err=102 then

Edit1. Text: ='Логический и физический файлы не связаны';

if Err=0 then

Edit1. Text: = 'Размер файла '+ IntToStr(FileSize(ff))+ ' байт';

end;

end.

1. 2. 5. 1. Особенности открытия текстовых файлов

В отношении текстовых файлов действие процедуры Reset (f)

означает открытие файла только для чтения, а Rewrite (f) - только для обновления файла.

Если необходимо добавить новые строки в конец уже существующего текстового файла, используют процедуру

                      Append(f),

которая не очищает файл, а только устанавливает текущий указатель файла в его конец.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...