Южно-Сахалінський інститут економіки, права та інформатики
Кафедра КТіС
Пояснювальна записка до курсовій роботі
з дисципліни: Мови програмування та методи трансляції
на тему: Потоки: TStream, TFileStream, TMemoryStream
Південно-Сахалінськ
2010
Введення
Завданням курсової роботи є реалізація програми для роботи з файловою структурою операційної системи Windows. Для реалізації програми потрібно використовувати інтегроване середовище розробки Delphi7.
Мета роботи - вивчити принципи програмування файлової структури в операційній системі Windows і створити програму для роботи з потоками TStream, TFileStream і TMemoryStream. У проекті передбачається реалізувати основні операції над потоками, такі як читання, запис, видалення і редагування.
Розробляється система виконує такі функції:
1. дозволяє створювати потоки TFileStream, TMemoryStream,
2. збереження даних у файли,
3. відкриття і редагування файлів за допомогою потоків,
4. використовувати дані з файлів в програмі.
Для розробки програми використовуються наступні програмні інструменти:
1. середовище розробки Delphi 7
1. Потік TStream
В основі ієрархії класів потоків лежить клас Tstream. Він забезпечує виконання основних операцій потоку безвідносно до реального носію інформації. Основними з них є читання і запис даних. Клас Tstream породжений безпосередньо від класу TObject. Потоки також грають важливу роль в читанні/запису компонентів з файлів ресурсів (DFM). Велика група методів забезпечує взаємодію компонента і потоку, читання властивостей компонента з ресурсу і запис значень властивостей в ресурс.
Таблиця 1 - Властивості і методи класу Tstream
Оголошення
Опис
property Position: Longint;
Визначає поточну позицію в потоці
property Size: Longint;
Визначає розмір потоку в байтах
function CopyFrom ( Source: TStream; Count: Longint): Longint;
Копіює з потоку Source Count байти, починаючи з поточної позиції. Повертає число скопійованих байтів
function Read (var Buffer; Count: Longint): Longint; virtual; abstract;
Абстрактний клас, що перекривається в спадкоємцях. Зчитує з потоку Count байти в буфер Buffer. Повертає число скопійованих байтів
procedure Read3uffer (Var Buffer; Count: Longint);
Зчитує з потоку Count байти в буфер Buffer. Повертає число скопійованих байтів
function Seek (Off set: Longint; Origin: Word): Longint; virtual; abstract;
Абстрактний клас, що перекривається в спадкоємцях. Зміщує поточну позицію в реальному носії даних на Offset байтів залежно від умови Origin
function Write (const Buffer; Count: Longint): Longint; virtual; abstract;
Абстрактний клас, що перекривається в спадкоємцях. Записує в потік Count байти з буфера Buffer. Повертає число скопійованих байтів
procedure WriteBuffer (Const Buffer; Count: Longint);
Записує в потік Count байти з буфера Buffer. Повертає число скопійованих байтів
function ReadComponent (Instance: TComponent): TComponent;
Передає дані з потоку в компонент instance, заповнюючи його властивості значеннями
function ReadComponentRes (Instance: TComponent): TComponent;
Зчитує заголовок ресурсу компонента Instance і значення його властивостей з потоку.
procedure ReadResHeader;
Зчитує заголовок ресурсу компонента з потоку
procedure WriteComponent (Instance: TComponent);
Передає в потік значення властивостей компонента Instance
procedure WriteComponentRes (const ResName: string; Instance: TComponent);
Записує в потік заголовок ресурсу компонента Instance і значення його властивостей
Отже, в основі операцій прочитування і запису даних в потоці лежать методи Read і Write. Саме вони викликаються для реального виконання операції всередині методів ReadBuffer і WriteBuffer, ReadComponent і WriteComponent. Так як клас TStream є абстрактним, то методи Read і write також є абстрактними. В класах-спадкоємців вони перекриваються, забезпечуючи роботу з конкретним фізичним носієм даних.
Лістинг 1 - створення, читання і запис потоку
Var
Stream: TStream;// Оголошення потоку
Begin
Stream: = TMemoryStream.Create (...);// Створення потоку
Stream.Read (...);// Читання даних з потоку
Stream.Write (...);// Запис даних у потік
Stream.Free;// Очистити потік
End;
Група методів забезпечує читання і запис з потоку ресурсу компонента. Вони використовуються при створенні компонента на основі даних про нього, збережених у форматі файлів ресурсів. Для читання ресурсу використовується метод ReadComponentRes, в якому послідовно викликаються: метод ReadResHeader - для зчитування заголовка ресурсу компонента з потоку; метод ReadComponent - для зчитування значень властивостей компонента. Для запису ресурсу в потік застосовується метод writeComponentRes.
2. Потік T FileStream
Об'єкт TFileStream є нащадком головного об'єкта TStream і дозволяє отримати доступ до диску, а так само створити потік для роботи з файлами. При цьому потік працює з файлом без урахування типу зберігаються в ньому даних.
Повний ім'я файлу, який треба відкрити, задається в параметрі FileName. Цей параметр - проста рядок:
constructor Create (const FileName: string; Mode: Word);
Параметр Mode визначає режим роботи з файлом. Він складається з прапорів режиму відкриття: fmCreate - файл створюється; fmOpenRead - файл відкривається для читання; fmopenwrite - Файл відкривається для запису; fmOpenReadWrite - файл відкривається для читання і запису.
І прапорів режиму спільного використання:
fmShareExciusive - Файл недоступний для відкриття іншими додатками;
fmShareDenyWrite - Інші програми можуть читати дані з файлу;
fmShareDenyRead - Інші програми можуть писати дані у файл;
fmShareDenyNone - Інші програми можуть виробляти з файлом будь-які операції. Створення потоку аналогічно прикладу, розглянутому в лістингу 1.
Детальніше познайомимося з методами читання, запису і внутрішньою структурою файлу. Почнемо зі структури. Коли ви відкрили файл, позиція курсору встановлюється в саме початок і будь-яка спроба читання або запису буде відбуватися в цю позицію курсору. Якщо вам треба прочитати або записати в будь-яку іншу позицію, то треба пересунути курсор. Для цього використовується Метод Seek. "Точка відліку "позиції залежить від значення параметра
Origin: soFromBeginning - зміщення повинно бути позитивним і відлічується від почата потоку;
soFromCurrent - Зсув щодо поточної позиції в потоці;
soFromEnd - Зміщення повинно бути негативним і відлічується ві...