Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi.Начало.doc
Скачиваний:
0
Добавлен:
03.01.2020
Размер:
1.56 Mб
Скачать

Пример работы с текстовыми файлами

В данном примере файл pole.txt открывается как текстовый файл. В него записываются строки чисел. После чего записанная в файл информация считывается и выводится в форме.

var

f : TextFile;

i, j, Y : Integer;

begin

AssignFile(f,'d:\temp\pole.TXT');

Rewrite(f);

{ Создать файл с 8 числами и пробелами }

Writeln(f,'1 2 3 4 ');

Writeln(f,'5 6 7 8 ');

Reset(f);

{ Чтение чисел в обратном порядке. SeekEof возвращает TRUE

пока не конец файла }

Y := 5;

while not SeekEof(f) do

begin

Read(f,j);

Canvas.TextOut(5, Y, IntToStr(j));

Y := Y + Canvas.TextHeight(IntToStr(j)) + 5;

end;

Объектный подход к работе с файлами

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

Эти возможности основаны на базовом классе TStream(поток), который имеет набор методов для записи и считывания информации и установки позиции внутри набора данных.

Рассмотрим класс TFileStream, предназначенный для работы с файлами на жест­ком диске. Этот класс является наследником класса THandleStream, который берет свое начало непосредственно от класса TStream. Так как при объектном подходе файл представляет собой простую последовательность байтов, то он может обрабатываться только как двоичный.

Технология работы с файлом при объектном подходе аналогична работе с файлом, применяемом при стандартном подходе. Сначала необходимо открыть файл, затем выполнять необходимые операции чтения, записи или перемещения по файлу. После этого файл закрывается.

Для открытия файла применяется конструктор:

constructor Create(const FileName: string; Mode: Word);

Параметр Mode может принимать одно из следующих значений:

Значение

Способ открытия файла

fmCreate

Создается новый файл. Если указанный файл уже сущест­вует, он открывается в режиме записи.

fmOpenRead

Для чтения

fmOpenWrite

Для записи

mOpenReadWrite

Для чтения и записи

Для считывания данных из потока применяется метод Read:

function Read(var Buffer; Count: Longint): Longint;

Где в переменную Buffer, начиная с текущей позиции в файле, записывается число байтов, указанное в параметре Count. Функция возвращает реально считанное число байтов.

Запись данных осуществляется с помощью метода Write:

function Write(const Buffer; Count: Longint): Longint;

Число байтов, указанное в параметре Count, записывается из переменной Buffer в текущую позицию в файле. Функция возвращает реально записанное число байтов.

Для установки текущей позиции в файле используется метод Seek:

function Seek(Offset: Longint; Origin: Word): Longint;

Параметр Offset задает число байтов, на которое необходимо переместиться. Параметр Origin задает позицию, от которой отсчитывается Offset-байтов, может принимать одно из следующих значений:

Значение параметра

Способ отсчета

soFromBeginning

От начала файла

soFromCurrent

От текущей позиции в файле

soFromEnd

От конца файла (значение Offset должно быть меньше или равно 0)

Собственных свойств у класса TFileStream нет. Он наследует два свойства класса THandleStream: сам идентификатор Handle и свойство Size, определяющее длину файла в байтах. Еще одно свойство унаследовано от класса TStream - это текущая позиция фай­ло­вого указателя, отсчитанная от начала файла в байтах (свойство Position).

Для закрытия файла применяется метод Free.

В следующем примере открывается файл f1.txt в режиме чтения и записи, из него считываются данные в переменную buf. Содержимое переменной buf записывается в поле Memo1 и отображается в форме.

var

buf : array[0..50] of char;

Stream : TFileStream;

begin

try

Stream:=TFileStream.Create('d:\temp\f1.txt', fmOpenReadWrite);

Stream.Read(buf,50);

Memo1.Lines.Add(buf);

finally

Stream.Free;

end;

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]