Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практическая работа N10.doc
Скачиваний:
3
Добавлен:
08.09.2019
Размер:
208.9 Кб
Скачать

5.2 Работа с файлом

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

Когда вы только открыли файл, позиция курсора устанавливается на начало, и любая попытка чтения или записи будет применена к этой позиции курсора. Чтобы прочитать (записать) в другую позицию, требуется передвинуть курсор. Для этого используют метод Seek, который имеет два параметра:

  • Число, указывающее количество байт (символов), на которые требуется передвинуть курсор.

  • Откуда нужно двигаться. Тут может быть три варианта:

    • SoFromBeginning – двигаться на указанное количество байт от начала файла.

    • SoFromCurrent – двигаться от текущей позиции курсора.

    • SoFromEnd – двигаться на указанное количество байт от конца файла к его началу.

Итак, чтобы передвинуть курсор от начала файла на 10 байт, нужно выполнить команду:

f.Seek(10, soFromBeginning);

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

  • Переменная, в которую будет записан прочитанный текст.

  • Количество байт, которые следует прочитать.

Разберем пример чтения из файла 10 символов, начиная с 15-й позиции:

var

f : TFileStream; //объявляем переменную

buf : array [0..10] of Char; //буфер для хранения прочитанных данных

begin

//открываем файл filename.txt для чтения и записи:

f := TFileStream.Create('c:\filename.txt', fmOpenReadWrite);

//перемещаемся на 15 символов вперед:

f.Seek(15, soFromBeginning);

//читаем в буфер 10 символов из установленной позиции:

f.Read(buf, 10);

Memo1.Lines.Add(buf); //скопировали эти 10 символов в Memo

//уничтожаем объект и тем самым закрываем файл:

f.Free;

end;

Метод Read возвращает количество реально прочитанных байт. Оно должно быть равно тому количеству байт, которые мы указали при вызове этого метода. Есть две причины, по которым это количество может быть не равно указанному:

  1. При чтении был достигнут конец файла, и функция прочитала меньше байт, чем планировалось.

  2. Ошибка на диске или любая другая проблема.

Для записи в файл используется метод Write. Есть два параметра и у него:

  1. Переменная, содержимое которой нужно записать.

  2. Число байт для записи.

Пользоваться методом записи можно точно также, как и методом чтения.

5.3 Закрытие

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

f.Free;

5.4 Пример

Пример чтения из файла 10 символов, начиная с 15-й позиции:

var

f : TFileStream; //объявляем переменную

buf : array [0..10] of Char; //буфер для хранения прочитанных данных

begin

//открываем файл filename.txt для чтения и записи:

f := TFileStream.Create('c:\filename.txt', fmOpenReadWrite);

//перемещаемся на 15 символов вперед:

f.Seek(15, soFromBeginning);

//читаем в буфер 10 символов из установленной позиции:

f.Read(buf, 10);

Memo1.Lines.Add(buf); //скопировали эти 10 символов в Memo

//уничтожаем объект и тем самым закрываем файл:

f.Free;

end;

Разместить компоненты на форме и подготовить файл необходимо самостоятельно.