Реферат Потоки TStream, TFileStream, TMemoryStream

>Южно-Сахалинский інститут економіки, правничий та інформатики

КафедраКТиС

>Пояснительная записка до курсової роботі

з дисципліни: Мови програмування та художні засоби трансляції

на задану тему: Потоки: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; Визначає поточну позицію у потоці
>propertySize:Longint; Визначає розмір потоку в байтах
>functionCopyFrom(Source:TStream;Count:Longint) :Longint; >Копирует з потокуSourceCount байти, починаючи із поточною позиції.Возвращает число скопійованих байтів
>functionRead(varBuffer;Count:Longint) :Longint;virtual;abstract; >Абстрактний клас, перекривається в наступників.Считивает з потокуCount байти в буферBuffer.Возвращает число скопійованих байтів
>procedureRead3uffer (>varBuffer;Count:Longint) ; >Считивает з потокуCount байти в буферBuffer.Возвращает число скопійованих байтів
>functionSeek (>Offset:Longint;Origin: Word):Longint;virtual;abstract; >Абстрактний клас, перекривається в наступників.Смещает поточну позицію у реальному носії даних наOffset байтів залежно від умовиOrigin
>functionWrite (>constBuffer;Count:Longint):Longint;virtual;abstract; >Абстрактний клас, перекривається в наступників.Записивает в потікCount байти з буфераBuffer.Возвращает число скопійованих байтів
>procedureWriteBuffer (>constBuffer;Count:Longint); >Записивает в потікCount байти з буфераBuffer.Возвращает число скопійованих байтів
>functionReadComponent (>Instance:TComponent):TComponent; Передає дані з потоку в компонентinstance, заповнюючи його властивості значеннями
>functionReadComponentRes (>Instance:TComponent) :TComponent; >Считивает заголовок ресурсу компонентаInstance і значення його властивостей з потоку.
>procedureReadResHeader; >Считивает заголовок ресурсу компонента з потоку
>procedureWriteComponent (>Instance:TComponent) ; Передає в потік значення властивостей компонентаInstance
>procedureWriteComponentRes (>constResName: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. Цей параметр — проста рядок:

>constructorCreate(constFileName:string; Mode: Word);

>Параметр Mode визначає режим роботи з файлом. Він складається з прапорів режиму відкриття:fmCreate — файл створюється;fmOpenRead — файл відкривається для читання;fmopenwrite — файл відкривається для записи;fmOpenReadWrite — файл відкривається для читання і запис.

І прапорів режиму спільного використання:

>fmShareExciusive — файл недоступний відкриття іншими додатками;

>fmShareDenyWrite — інші докладання можуть читати дані з файла;

>fmShareDenyRead — інші докладання можуть писати дані в файл;

>fmShareDenyNone — інші докладання виробляти з файлом будь-які операції. Створення потоку аналогічно прикладу, розглянутому лістингу 1.

Докладніше познайомимося з методами читання, запису і внутрішньої структурою файла. Почнемо з структури. Коли ж ви відкрили файл, позиція курсору встановлюється до самого початок і кожна спроба читання чи записи відбуватиметься у цю позицію курсору. Якщо до вас треба прочитати чи записати до будь-якої іншої позицію, треба пересунути курсор. І тому використовується МетодSeek. "Крапка відліку" позиції залежить від значення параметра

>Origin:soFromBeginning — усунення має бути позитивним і відраховується від розпочато потоку;

>soFromCurrent — усунення щодо поточної позиції з потоці;

>soFromEnd — усунення має бути негативним і відраховується від кінця потоку.

Майте на увазі, що перший байт - це одне символ. Єдине виняток - файли в форматіUnicode. Вони один символ займає 2 байта.

Отже, слід враховувати, у вигляді зберігається інформація в файлі.

Отже, якщо ви треба пересунутися на 10 символів з початку файла, можете написати наступний код:

>Stream.Seek(10,SoFromBeginning) ;

Методseek завжди повертає усунення курсору з початку файла. Цим можна скористатися, щоб отримати, де нині перебуваємо, а можна й дізнатися загальний розмір файла. Якщо переправитися у кінець файла, то функція поверне кількість байт з початку остаточно, т. е. повний розмір файла.

Наступного прикладі встановлюється позиція в файлі на 0 байт від кінця, т. е. саме у кінець. Тим самим було виходить повний розмір файла:

Розмір файла :=Stream.Seek(0,soFromEnd);

Для читання з файла потрібно використовувати методRead. Це методу два параметра:

1.Переменная, на якому буде записано результат читання;

2. Кількість байт, що треба прочитати.

У листингу 2 розглянемо приклад читання з файла з 20-ї позиції

>Листинг 2 – Читання з файла, починаючи з 20-ї позиції.

>VarStream:TFileStream; //>Переменная типу об'єктTFileStream.buf:array[0..10] ofchar; //Буфер для зберігання прочитаних даних

>begin // Далі відкриваємо файл “>Sample.wrk”.Stream:=TFileStream.Create('c:Sample.wrk,fmOpenReadWrite);Stream.Seek(20,soFromBeginning); // Переміщення на 20 символів вперед.Stream.Read(buf, 5); // Читання 5 символів з встановленої позиції.Stream.Free; // Очищення потоку.

end;

МетодRead повертає кількість реально прочитаних байт (символів).

Не було жодних проблем, це число має бути дорівнювала кількості запитаних для читання байт. Маю тільки два випадку, коли ці числа відрізняються:

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

2. Помилка на диску чи будь-яка інша проблема.

Для читання застосовується методwrite. В нього два параметра :

1.Переменная, вміст якої, варто записати;

2. Кількість байт для записи.

Користуватися цим методом не складно як і і методом для читання.

3. Потік T>MemoryStream

КласTMemoryStream гарантує збереження даних в адресному просторі. У цьому методи доступу до цих даним залишаються тими самими, що й за працювати з файловими потоками. Це дозволяє вживати адресне простір для зберігання проміжних результатів роботи докладання, і навіть з допомогою стандартних методів здійснювати обмін даними між пам'яттю та інші фізичними носіями.

До сформування потокуTMemoryStream використовується конструкторCreate без параметрів:

>ConstructorCreate;

Для читання інформації з файла з одночасним занесенням їх у потік використовується методLoadFromFile:

>ProcedureLoadFromFile(constFileName:string);

файл потік клас метод

І аналогічний метод для записи вмісту потоку в файл:

>ProcedureSaveToFile(constFileName:string);

метод для читання інформації з іншого потоку незалежно з його типу, і навіть метод записи береженої інформацією інший потік:

>ProcedureLoadFromStream(Stream:TStream);

>ProcedureSaveToStream(Stream:TStream);

Також, для потоків, які працюють із оперативної пам'яттю, визначено

операція очищення вмісту з допомогою методуClear:

>ProcedureClear;


Укладання

Потоки, згадані вище багато важать під час створення проектів до роботи з файлами й від, а як і є невід'ємною частиною під час роботи з файловій структурою.Разработанное додаток відбиває основні функції потоківTFileStream іTmemoryStream, демонструє способичтения/записи файлів з допомогою даних потоків. Вважаю що у теоретичної частини курсової тема потоків розкрито цілком і надає всю необхідну інформацію їхнього використання.


Список використаних джерел

1. М.Фленов Біблія Delphi/ М.Є.Флеонов-СПб.:БХВ-Петербург, 2007. ->880с.

2.Http://proclub –Клуб програмістів.

3.Http://life-prog –Мови програмування.

4.Http://Delphimaster - МайстраDELPHI

5.delphi.3dn - Архів матеріалів - Все проdelphi

6.delphiplus.org - Новини про мову програмування

7.delphiexpert – Матеріал про Delphi

8.delphiworld.narod - Матеріал про Delphi

9.delphirus.com - Матеріал про Delphi

10.delphibasics - Довідник - "Основи Delphi"


Додаток

У виконання курсової роботи була створено програмне додаток «>Streams.exe».

Малюнок 1- Інтерфейс програмиStreams.exe


Схожі реферати:

Навігація