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

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

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

2017-11-28 172
Объектный подход к работе с файлами 0.00 из 5.00 0 оценок
Заказать работу

 

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

Эти возможности основаны на базовом классе 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;

 

Задания для самостоятельной работы

 

  1. Создайте Delphi-приложение, которое создает файл numbers.txt и записывает в него пять введенных пользователем целых чисел. Посмотрите с помощью текстового редактора указанный файл. Убедитесь в том, что запись выполнена верно.
  2. Созданное в предыдущем пункте приложение дополните возможностью дописывать в конец файла еще пять введенных пользователем целых чисел. Вывести содержимое файла в форме.
  3. Создайте приложение, которое вычисляет среднее арифметическое чисел, находящихся в файле numbers.txt и выводит это значение в форме.
  4. Создайте Delphi-приложение, которое дописывает в файл phone.txt имя, фамилию и номер телефона, например, вашего товарища. Если файла на диске нет, то программа должна создать его.
  5. Созданное в предыдущем пункте приложение дополните возможностью поиска телефона человека в телефонном справочнике (файл phone.txt) по его фамилии. Если в справочнике есть люди с одинаковыми фамилиями, программа должна вывести список всех этих людей.
  6. Создайте Delphi-приложение, которое позволяет добавлять нового игрока в файл Igroki.txt. В файле хранится имя игрока и количество набранных им очков. В случае, если игрок с таким именем уже существует, необходимо увеличить число набранных им очков на количество очков, введенное пользователем.
  7. В текстовом файле хранится информация о том, как расставлены корабли, для игры «Морской бой». При этом 1 – означает фрагмент корабля, 0 – пустая клетка. Примерный вид файла приведен ниже:

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

8. Напишите универсальную программу тестирования. Тест, последовательность вопросов и варианты ответов должны находиться в одном или нескольких текстовых файлах. Количество вопросов теста не ограничено. Программа должна выставлять оценку, например, по следующему правилу: ОТЛИЧНО – за правильные ответы на все вопросы теста, ХОРОШО – за правильные ответы на не менее чем 80% вопросов теста, УДОВЛЕТВОРИТЕЛЬНО – если правильных ответов более чем 60%, ПЛОХО – если правильных ответов менее 60%. Структуру файлов предлагается разработать самостоятельно.

 

Контрольные вопросы

 

1. Какова общая технология работы с файлами в Delphi?

2. Какие способы работы с файлами предлагает стандартный подход?

3. Каковы особенности работы с нетипизированными файлами? Как описать такой файл? Как выполнять операции считывания и записи?

4. Каковы особенности работы с типизированными файлами? Как описать такой файл? Как выполнять операции считывания и записи?

5. Каковы особенности работы с текстовыми файлами? Как описать такой файл? Как выполнять операции считывания и записи?

6. Как изменить текущую позицию в файле?

7. Как узнать размер файла?

8. Как узнать присутствует ли уже данный файл на диске?

9. Как узнать текущую позицию в файле?

10. Можно ли создать новый каталог программно?

11. Каковы особенности работы с файлами с использованием объектного подхода?

 

 


Поделиться с друзьями:

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.