Файловые потоки

Автор: Пользователь скрыл имя, 07 Июня 2012 в 17:30, курсовая работа

Краткое описание

Файловые потоки представляют объектно-ориентированный способ чтения и записи информации в дисковые файлы. Библиотека файловых потоков разработана для работы только с текстовыми файлами. Однако можно применить ее и для чтения и записи двоичных значений, текстов, структур или любых других объектов.

Оглавление

Введение.............................................................................................................. 3
Классы потоков ........................................................................................... 4
Стандартные потоки ...................................................................... 6
Файловые потоки ........................................................................................ 8
2.1. Возможности работы потока
TStream - TFileStream - файловый поток ...........................................8
Работа с файловыми потоками в С++ ........................................................10
Stream-библиотека С++ ....................................................................10
Функция-компонент open ................................................................11
Последовательный текстовый поток ввода/вывода .......................13
Функция-элемент getline ..................................................................13
Последовательный двоичный файловый ввод/вывод ....................14
Функция-элемент write .....................................................................15
Функция-элемент read .......................................................................16
Файловый ввод/вывод с прямым доступом ....................................16
Функция-компонент seekg ................................................................17
Файловые потоки в NTFS .............................................................................18
Физическая структура NTFS ............................................................18
Обзор структуры разделов ...............................................................19
Файлы и потоки .................................................................................21
Работа с файловыми потоками в NTFS ...........................................23
Работа с потоками из консоли .........................................................25
Заключение ...........................................................................................................27
Список использованной литературы .............................................

Файлы: 1 файл

КУРСОВАЯ.docx

— 53.92 Кб (Скачать)

Содержание 

Введение.............................................................................................................. 3

  1. Классы потоков  ........................................................................................... 4
    1. Стандартные потоки  ...................................................................... 6
  2. Файловые потоки  ........................................................................................ 8

        2.1. Возможности работы потока

          TStream - TFileStream - файловый поток  ...........................................8

  1. Работа с файловыми потоками  в С++ ........................................................10
    1. Stream-библиотека С++  ....................................................................10
    1. Функция-компонент open  ................................................................11
    1. Последовательный  текстовый поток ввода/вывода .......................13
    2. Функция-элемент getline  ..................................................................13
    3. Последовательный двоичный файловый ввод/вывод ....................14
    4. Функция-элемент write  .....................................................................15
    5. Функция-элемент read .......................................................................16
    6. Файловый ввод/вывод с прямым доступом  ....................................16
    7. Функция-компонент seekg  ................................................................17
  1. Файловые потоки в NTFS  .............................................................................18
    1. Физическая структура NTFS  ............................................................18
    2. Обзор структуры разделов  ...............................................................19
    3. Файлы и потоки  .................................................................................21
    4. Работа с файловыми потоками в NTFS  ...........................................23
    5. Работа с потоками из консоли  .........................................................25

Заключение  ...........................................................................................................27

Список использованной литературы ............................................................... 28 
 
 

Введение 

     Файловые  потоки представляют объектно-ориентированный  способ чтения и записи информации в дисковые файлы. Библиотека файловых потоков разработана для работы только с текстовыми файлами. Однако можно применить ее и для чтения и записи двоичных значений, текстов, структур или любых других объектов.

     Для работы с потоками на С++ ofstream и ifstream  создаются следующие классы:

  • Ofstream- для вывода (записи)  данных в файл;
  • Ifstream- для ввода (чтения) данных из файла;
  • Fstream – для ч тения для записи данных.

     Чтобы использовать эти классы, в текст  программы необходимо включить  дополнительный заголовочный файл fstream.h. После этого в программе определяют  файловые потоки, соответствующих типов.

     Например:

  • Ofstream outFile; // Ввыходной файловый поток.
  • Ifstream inFile; // Входной файловый поток.
  • Fstream ioFile; // Файловый поток для ввода и вывода.

     Создание  файлового потока связывает имя  потока с выделяемым для него буфером  и инициализирует переменные  состояния  потока. Потому что перечисленные  классы файловых потоков наследует  свойства класса ios , то и переменные состояние каждого файлового потока  наследуется из базового класса . так как файловые классы являются производными  от класса ostream, istream, stream, то они поддерживают описанный в предыдущих  шагах форматированный и бесформативный обмен с файлами. Необходимо  открыть соответствующий файл и связать его с файловым потоком.

   

  1. Классы  потоков
 

     Классы, связанные с потоками С++, содержат расширяемые библиотеки, позволяющие  выполнять форматированный ввод/вывод  с контролем типов как для  предопределенных, так и для определяемых пользователем типов данных с  помощью перегруженных операций и прочих объектно-ориентированных  методов.

     Потоком будем называть понятие, относящееся к любому переносу данных от источника (или поставщика данных) к приемнику (или потребителю) данных. Несмотря на свое имя, класс потока может быть использован для форматирования данных в ситуациях, не подразумевающих реального выполнения ввода/вывода. Так, форматирование в памяти можно применять к символьным массивам и прочим структурам.

     В файле iostream.h имеется два параллельных класса: streambuf и ios. Оба они являются классами низкого уровня, и каждый выполняет свой круг задач.

     Класс streambuf обеспечивает общие правила  буферизации и обработки потоков  в тех случаях, когда не требуется  значительного форматирования этих потоков. Класс streambuf представляет собой  базовый класс, используемый другими  классами из iostream.h. Большинство функций-членов streambuf являются встраиваемыми (inline) для  обеспечения максимальной эффективности. Классы strstreambuf и filebuf являются производными от streambuf.

     Класс ios (и, следовательно, производные от него классы) содержит указатель на streambuf.

     Класс ios имеет два производных класса: istream (для ввода) и ostream (для вывода). Другой класс, iostream, является производным  классом сразу от istream и ostream вследствие множественного наследования:

    class ios;  
     class istream: virtual public ios;  
     class ostream: virtual public ios;  
     class iostream: public istream, public ostream;

     Кроме того, существует три класса _withassign, являющихся производными классами от istream, ostream и iostream:

    class istream_withassign: public istream;  
     class ostream_withassign: public ostream;  
     class iostream_withassign: public iostream;

     Класс ios содержит переменные состояния для  интерфейса с streambuf и обработки ошибок.

     Класс istream поддерживает как форматированные, так и неформатированные преобразования потоков символов, извлекаемых из streambuf.

     Класс ostream поддерживает как форматированные, так и неформатированные преобразования потоков символов, помещаемых в streambuf.

     Класс iostream объединяет классы istream и ostream для  двунаправленных операций, в которых  один поток действует и как  источник, и как приемник.

     Производные классы _withassign обеспечивают четыре предопределенных "стандартных" потока: cin, cout, cerr и clog, описываемые в следующем разделе. Классы _withassign добавляют к соответствующим  базовым классам операции присваивания следующим образом:

    class istream_withassign: public istream {  
     istream_withassign();  
     istream& operator = (istream&);  
     istream& operator = (streambuf*);  
     }  
и аналогично для ostream_withassign и iostream_withassign.

     Классом потока называется любой класс, производный от классов istream и ostream.

    1. Стандартные потоки
 

     Выполнение  любой программы С++ начинаются с  четырьмя предопределенными открытыми  потоками, объявленными как объекты  классов _withassign в iostream.h следующим образом:

  extern istream_withassign cin; extern ostream_withassign cout; extern ostream_withassign cerr; extern ostream_withassign clog;

     Их  конструкторы вызываются всякий раз  при включении iostream.h, но фактическая  инициализация выполняется только один раз.

     Все эти предопределенные стандартные  потоки по умолчанию связаны с  терминалом.

  Четыре  стандартных потока предназначены  для:

  cin - стандартного ввода;  
     cout - стандартного вывода;  
     cerr - стандартного вывода ошибок;  
     clog - полностью буферизованного вывода ошибок.

     В табл. 5 приведено назначение классов  потокового ввода-вывода.

Таблица 5

Назначение  классов потокового ввода-вывода

ios Потоковый базовый класс
Потоковые классы ввода
istream Потоковый класс  общего назначения для ввода, являющийся базовым классом для других потоков  ввода
ifstream Потоковый класс  для ввода из файла
istream with assign Потоковый класс  ввода для cin
istrstream Потоковый класс  для ввода строк
Потоковые классы вывода
ostream Потоковый класс  общего назначения для вывода, являющийся базовым классом для других потоков  вывода
ofstream Потоковый класс  для вывода в файл
ostream_withassign Потоковый класс  ввода для cout, cerr, and clog
ostrstream Потоковый класс  для вывода строк
Потоковые классы ввода-вывода
iostream Потоковый класс  общего назначения для ввода-вывода, являющийся базовым классом для  других потоков ввода-вывода
fstream Потоковый класс  для ввода-вывода в файл
sir stream Потоковый класс  для ввода-вывода строк
stdiostream Класс для ввода-вывода в стандартные файлы ввода-вывода
Классы  буферов для потоков
Streambuf Абстрактный базовый  класс буфера потока
filebuf Класс буфера потока для дисковых файлов
s trs treambuf Класс буфера потока для строк
stdiobuf Класс буфера потока для стандартных файлов ввода-вывода

 

     Назначение  почти всех классов следует из их названия. Классы группы _withassign являются производными соответствующих потоковых  классов без этого окончания. Они перегружают операцию присваивания, что позволяет изменять указатель  на используемый классом буфер.  

  1. Файловые  потоки
 
      1. Возможности работы потока TStream - TFileStream - файловый поток
 

     Этот  класс был специально введен для  работы с файлами.

Для работы с файловым потоком  надо записать в Uses модули classes, Sysutils (classes - включает в себя собственно определение класса, Sysutils - некоторые константы необходимые для работы).

Пример записи/перезаписи файла:

Procedure WriteFileUsingStream(s, FileName:string);

begin  with TFileStream.create(FileName, fmCreate or fmOpenWrite) do

     try

     write(pointer(s)^,length(s));

               finally

    free;

               end;

                end; 

     TFileStream.create - конструктор класса, его вызов  требует указания имени файла  и опций его открытия, следующие  опции определены:

fmCreate = $FFFF;

fmOpenRead = $0000;

fmOpenWrite = $0001;

fmOpenReadWrite = $0002;

fmShareCompat = $0000;

fmShareExclusive = $0010;

fmShareDenyWrite = $0020;

fmShareDenyRead = $0030;

fmShareDenyNone = $0040;

     Метод Write - этим методом в файл пишется любая информация из буфера любого типа, указывается только буффер и количество записываемых байтов. В данном случае используется переменная String в качестве буффера, но так как для длинных строк она представляет собой лишь указатель, то конструкция "pointer(s)^" заставляет обращаться именно к ее содержимому.

     Следующий код демонстрирует чтение файла с использованием файлового потока:

var p:PChar;

begin  GetMem(p, 255);

  with TFileStream.create('c:\myText.txt', fmOpenReadWrite) do

     try

    Seek(10,soFromBeginning);

                read(p^, 254);

                finally

               free;

Информация о работе Файловые потоки