Потоки TStream, TFileStream, TMemoryStream

Принципы программирования файловой структуры в операционной системе Windows. Свойства и методы класса Tstream. Пример создания, чтения и записи потока. Чтение, запись и внутренняя структура файла. Пример чтения из файла, начиная с заданной позиции.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.05.2011
Размер файла 251,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

Кафедра КТиС

Пояснительная записка к курсовой работе
по дисциплине: Языки программирования и методы трансляции
на тему: Потоки: 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. Поток TFileStream
Объект 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 -- смещение должно быть отрицательным и отсчитывается от конца потока.
Не забывайте, что один байт - это один символ. Единственное исключение - файлы в формате Unicode. В них один символ занимает 2 байта.
Таким образом, надо учитывать, в каком виде хранится информация в файле.
Итак, если вам надо передвинуться на 10 символов от начала файла, можете написать следующий код:
Stream.Seek(10, SoFromBeginning) ;
Метод seek всегда возвращает смещение курсора от начала файла. Этим можно воспользоваться, чтобы узнать, где мы сейчас находимся, а можно и узнать общий размер файла. Если переместиться в конец файла, то функция вернет количество байт от начала до конца, т. е. полный размер файла.
В следующем примере устанавливается позиция в файле на 0 байт от конца, т. е. в самый конец. Тем самым получается полный размер файла:
Размер файла := Stream.Seek(0, soFromEnd);
Для чтения из файла нужно использовать метод Read. У этого метода два параметра:
1. Переменная, в которую будет записан результат чтения;
2. Количество байт, которые надо прочитать.
В листинге 2 рассмотрим пример чтения из файла с 20-й позиции
Листинг 2 - Чтения из файла, начиная с 20-й позиции.
Var Stream: TFileStream; //Переменная типа объект TFileStream. buf: array[0..10] of char; // Буфер для хранения прочитанных данных
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. Поток TMemoryStream
Класс TMemoryStream обеспечивает сохранение данных в адресном пространстве. При этом методы доступа к этим данным остаются теми же, что и при работе с файловыми потоками. Это позволяет использовать адресное пространство для хранения промежуточных результатов работы приложения, а также при помощи стандартных методов осуществлять обмен данными между памятью и другими физическими носителями.
Для создания потока TMemoryStream используется конструктор Create без параметров:
Constructor Create;
Для чтения информации из файла с одновременным занесением ее в поток используется метод LoadFromFile:
Procedure LoadFromFile(const FileName: string);
файл поток класс метод
И аналогичный метод для записи содержимого потока в файл:
Procedure SaveToFile(const FileName: string);
метод для чтения информации из другого потока вне зависимости от его типа, а также метод записи хранимой информации в другой поток:
Procedure LoadFromStream(Stream: TStream);
Procedure SaveToStream(Stream: TStream);
Также, для потоков, работающих с оперативной памятью, определена
операция очистки содержимого с помощью метода Clear:
Procedure Clear;
Заключение
Потоки, описанные выше играют большую роль при создании проектов для работы с файлами и информацией, а так же являются неотъемлемой частью при работе с файловой структурой. Разработанное приложение отражает основные функции потоков TFileStream и TmemoryStream, демонстрирует способы чтения/записи файлов с помощью данных потоков. Я считаю что в теоретической части курсовой тема потоков раскрыта полностью и предоставляет всю необходимую информацию для их использования.
Список использованных источников
1. М. Фленов Библия Delphi/ М.Е. Флеонов-СПб.: БХВ-Петербург, 2007. -880с.
2. Http://proclub.ru -Клуб программистов.
3. Http://life-prog.ru -Языки программирования.
4. Http://Delphimaster.ru - Мастера DELPHI
5. http://www.delphi.3dn.ru - Архив материалов - Всё о delphi
6. http://www.delphiplus.org - Новости о языке программирования
7. http:// www.delphiexpert.ru - Материал о Delphi
8. http:// delphiworld.narod.ru - Материал о Delphi
9. http:// www.delphirus.com - Материал о Delphi
10. http:// www.delphibasics.ru - Справочник - "Основы Delphi"
Приложение
В ходе выполнения курсовой работы было создано программное приложение «Streams.exe».
Рисунок 1- Интерфейс программы Streams.exe
Размещено на Allbest.ru

Подобные документы

  • Описание типизированных файлов. Принципы работы с файлами, создание и открытие на запись нового файла. Чтение из файла, открытие существующего файла на чтение. Определение имени файла. Запись в текстовый файл. Описание множества и операции над ними.

    реферат [86,4 K], добавлен 07.02.2011

  • Программирование в операционной системе Windows. Работа с потоками и процессами ОС. Методы их создания. Основы вызова API-функций. Пример создания диалогового окна без использования файла ресурсов. Разработка программы с помощью 32-битного ассемблера.

    курсовая работа [107,6 K], добавлен 18.05.2014

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

    презентация [133,9 K], добавлен 21.06.2014

  • Файловый ввод/вывод с использованием разных классов. Вызовы операционной системы. Использование вызовов операционной системы. Основные способы открытия файла. Замена файла, связанного со стандартными устройствами ввода/вывода. Операции чтения файла.

    курсовая работа [1,1 M], добавлен 09.12.2016

  • Понятия файлов и каталогов. Область внешней памяти, группа файлов на одном носителе. Древовидная структура файлов на диске. Имя и местонахождение файла. Маршрут или путь по файловой системе. Запись имени файла в DOSе. Шаблоны. Структура каталога.

    лабораторная работа [15,2 K], добавлен 30.09.2008

  • Алгоритм и код программы для создания исходного двоичного файла чисел с произвольным количеством элементов, чтения из файла действительных восьмибайтных элементов и подсчёта общего количества элементов файла. Вывод результата работы программы на экран.

    контрольная работа [1,0 M], добавлен 23.11.2014

  • Проектирование микропроцессорного устройства для записи и чтения данных из памяти flash-типа и осуществления взаимодействия с персональным компьютером посредством универсальной последовательной шины (USB). Программное обеспечение для устройства.

    курсовая работа [868,3 K], добавлен 23.12.2012

  • Описание используемых в программе операторов, процедур, функций. Директива include. Правила объявления и определения функций в СИ++. Блок-схема алгоритма программы. Подпрограммы чтения из файла и записи в файл. Использование заголовочных файлов.

    курсовая работа [346,8 K], добавлен 26.04.2012

  • Назначение команды "diskcomp". Текст и запуск командного файла. Сравнение команды в Windows 7 и Windows XP. Разработка файла-сценария в ОС Linux. Создание файла в подкаталоге. Создание файла "oglavlenie.txt" с отсортированным по времени списком файлов.

    курсовая работа [1,6 M], добавлен 22.08.2012

  • Разработка программы, представляющей собой простой текстовый редактор, использующий структуру данных для промежуточного хранения редактируемого файла. Функциональное описание разработки. Внутренняя структура двоичного файла нового класса "bin_file".

    курсовая работа [254,6 K], добавлен 26.01.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.