Автор: Пользователь скрыл имя, 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
Список использованной литературы .............................................
Содержание
Введение......................
2.1. Возможности работы потока
TStream - TFileStream - файловый поток ..............................
Заключение
..............................
Список использованной
литературы ..............................
Введение
Файловые потоки представляют объектно-ориентированный способ чтения и записи информации в дисковые файлы. Библиотека файловых потоков разработана для работы только с текстовыми файлами. Однако можно применить ее и для чтения и записи двоичных значений, текстов, структур или любых других объектов.
Для работы с потоками на С++ ofstream и ifstream создаются следующие классы:
Чтобы использовать эти классы, в текст программы необходимо включить дополнительный заголовочный файл fstream.h. После этого в программе определяют файловые потоки, соответствующих типов.
Например:
Создание файлового потока связывает имя потока с выделяемым для него буфером и инициализирует переменные состояния потока. Потому что перечисленные классы файловых потоков наследует свойства класса ios , то и переменные состояние каждого файлового потока наследуется из базового класса . так как файловые классы являются производными от класса ostream, istream, stream, то они поддерживают описанный в предыдущих шагах форматированный и бесформативный обмен с файлами. Необходимо открыть соответствующий файл и связать его с файловым потоком.
Классы,
связанные с потоками С++, содержат
расширяемые библиотеки, позволяющие
выполнять форматированный
Потоком будем называть понятие, относящееся к любому переносу данных от источника (или поставщика данных) к приемнику (или потребителю) данных. Несмотря на свое имя, класс потока может быть использован для форматирования данных в ситуациях, не подразумевающих реального выполнения ввода/вывода. Так, форматирование в памяти можно применять к символьным массивам и прочим структурам.
В файле iostream.h имеется два параллельных класса: streambuf и ios. Оба они являются классами низкого уровня, и каждый выполняет свой круг задач.
Класс
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 поддерживает как форматированные,
так и неформатированные
Класс
ostream поддерживает как форматированные,
так и неформатированные
Класс iostream объединяет классы istream и ostream для двунаправленных операций, в которых один поток действует и как источник, и как приемник.
Производные
классы _withassign обеспечивают четыре предопределенных
"стандартных" потока: cin, cout, cerr и
clog, описываемые в следующем
class
istream_withassign: public istream {
istream_withassign();
istream& operator = (istream&);
istream& operator = (streambuf*);
}
и аналогично для ostream_withassign и iostream_withassign.
Классом потока называется любой класс, производный от классов istream и ostream.
Выполнение любой программы С++ начинаются с четырьмя предопределенными открытыми потоками, объявленными как объекты классов _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
Назначение классов потокового ввода-вывода
|
Назначение
почти всех классов следует из
их названия. Классы группы _withassign являются
производными соответствующих потоковых
классов без этого окончания.
Они перегружают операцию присваивания,
что позволяет изменять указатель
на используемый классом буфер.
Этот класс был специально введен для работы с файлами.
Для работы с файловым потоком надо записать в 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.
try
Seek(10,soFromBeginning);
read(p^, 254);
finally
free;