Автор: Пользователь скрыл имя, 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
Список использованной литературы .............................................
end;
showmessage(p);
FreeMem(p);
end;
Работа с файловыми потоками весьма быстра, этот класс, являясь классом VCL, в то же время базируется на низкоуровневых функциях Windows, что обеспечивает очень высокую скорость работы и стабильность операций. К тому же многие компоненты и классы VCL поддерживают прямое чтение и запись с файловыми потоками, что занчительно упрощает работу - например TStringList, TBlobField, TMemoField и другие.
Файловые
потоки могут быть рекомендованы
к использованию в большинстве
случаев для чтения и записи файлов
(за исключением специфических
Stream-библиотека
(известная также как
Существуют
дополнительные файлы библиотеки ввода/вывода,
в которых имеются более
В этом разделе представлены функции-элементы ввода/вывода, являющиеся общими как для последовательного, так и для прямого доступа. Эти функции включают open, close, good и fail в дополнение к операции . Функция open открывает файловый поток для ввода, вывода, добавления, а также для ввода и вывода. Эта функция позволяет указывать тип данных, с которыми вы собираетесь работать: двоичные или текстовые.
При работе с файловым вводом/выводом очень важно знать различие между текстовым и двоичным режимами. Текстовый режим предназначен для текстовых файлов, в которых имеются строки обычного текста. Двоичный режим используется для любых других и особенно для файлов, которые сохраняются в форматах, неудобных для чтения человеком.
Существуют некоторые особые тонкости, связанные с файлами текстового режима, на которые следует обратить особое внимание и запомнить. Первая из них - символ EOF (26 в коде ASCII или Ctrl+Z) - представляет собой метку (символ) конца файла. В текстовом режиме, где встречается символ EOF, система C++ низкого уровня автоматически продвигается к концу файла; вы ничего не можете прочитать после специального символа. Это может вызвать проблемы, если такой специальный символ окажется в середине файла.
Другая
особенность текстового режима заключается
в том, как интерпретируются строки
текстового файла. Каждая строка заканчивается
последовательностью конца
Прототип функции open
void open (const char* filename, int mode, int m = filebuf::openprot);
Параметр filename задает имя открываемого файла. Параметр mode указывает режим ввода/вывода. Далее следует список аргументов для mode, описанных в заголовочном файле FSTREAM.H:
Пример 1.
// открыть поток для ввода
fstream f;
f.open("simple.txt", ios::in);
// открыть поток для вывода fstream f;
fstream f;
f.open ("simple.txt", ios::out);
//
открыть поток ввода/вывода
fstream f;
f.open("simple.txt", ios::in | ios::out | ios::binary);
Функция close закрывает поток и освобождает использовавшиеся ресурсы. Эти ресурсы включают буфер памяти для операции потокового ввода/вывода.
Прототип для функции close:
void close();
Пример 2.
fstream f;
// открыть поток
f.open ( "simple.txt", ios::in);
// работа с файлом
// закрыть поток
f.close ();
Stream-библиотека C++ Включает в себя набор основных функций, которые контролируют состояние ошибки потоковой операции. Эти функции включают следующие:
Stream-библиотека
C++ предоставляет дополнительные
функции для установки и
Функции и операции последовательного текстового ввода/вывода являются довольно простыми. Эти функции и операции включают:
Прототипы функции-элемента getline:
istream& getline (char* buffer, int size, char delimiter = '\n');
istream& getline (signed char* buffer, int size, char delimiter = '\n');
istream& getline (unsigned char* buffer, int size, char delimiter = '\n');
Параметр buffer - это указатель на строку, принимающую символы из потока. Параметр size задает максимальное число символов для чтения. Параметр delimiter указывает разделяющий символ, который вызывает прекращение ввода строки до того, как будет введено количество символов, указанное в параметре size. По умолчанию параметру delimiter присваивается значение '\n'.
Пример 3.
fstream f;
char textLine[MAX];
f.open("sample.txt", ios::in);
while (!f.eof()) {
f.getline(textLine, MAX);
cout << textLine << endl;
}
f.close();
Stream-библиотека
C++ имеет перегруженные потоковые
функции-элементы write и read для последовательного
двоичного файлового ввода/
Прототип
перегруженной функции-
ostream& write(const char* buff, int num);
ostream& write(const signed char* buff, int num);
ostream& write(const unsigned char* buff, int num);
Параметр buff - это указатель на буфер, содержащий данные, которые будут посылаться в выходной поток. Параметр num указывает число байт в буфере, которые передаются в этот поток.
Пример 4.
const MAX = 80;
char buff[MAX+1] = "Hello World!";
int len = strlen (buff) + 1;
fstream f;
f.open("CALC.DAT", ios::out | ios::binary);
f.write((const unsigned char*) &len, sizeof(len));
f.write((const unsigned char*) buff, len);
f.close();
В этом примере открывается файл CALC.DAT, записывается целое, содержащее число байт в строке и записывается сама строка перед тем, как файл закрывается.
Функция
read считывает некоторое количество
байт из входного потока. Эта функция
может считывать любую
3.7.
Функция-элемент read
Прототип перегруженной функции-элемента read:
ostream& read(char* buff, int num);
ostream& read(signed char* buff, int num);
ostream& read(unsigned char* buff, int num);
Параметр buff - это указатель на буфер, который принимает данные из входного потока. Параметр num указывает число считываемых из потока байт.
Пример 5.
const MAX = 80;
char buff [MAX+1];
int len;
fstream f;
f.open("CALC.DAT", ios::in | ios::binary);
f.read((unsigned char*) &len, sizeof(len));
f.read((unsigned char*) buff, len);
f.close();
В
этом примере считывается
3.8.
Файловый ввод/вывод
с прямым доступом
Файловые операции ввода/вывода прямого доступа также используют потоковые функции-элементы read и write, представленные в предыдущем разделе. Stream-библиотека имеет ряд функций, позволяющих передвигать указатель потока в любое необходимое положение. Функция-элемент seekg - одна из таких функций.
3.9.
Функция-компонент seekg
Прототип
для перегруженной функции-
istream& seekg(long pos);
istream& seekg(long offset, seek_dir dir);
Параметр pos в первой версии определяет абсолютное положение байта в потоке. Во второй версии параметр offset определяет относительное смещение, в зависимости от аргумента dir. Аргументы для последнего параметра:
ios::beg С начала файла
ios::cur С текущей позиции файла
ios::end С конца файла
Пример 6.
const BLOCK SIZE = 80
char buff[BLOCK_SIZE] = "Hello World!";
f.open("CALC.DAT", ios::in | ios::out | ios::binary);
f.seekg(3 * BLOCK_SIZE); // продвинутся к блоку 4
f.read((const unsigned char*)buff, BLOCK_SIZE);
cout < buff < endl;
fclose
();
Операционные
системы от Microsoft семейства Windows NT не
возможно себе представить без файловой
системы NTFS - одной из наиболее сложных
и успешных среди существующих в
настоящее время файловых систем.
Данная глава расскажет вам, какие особенности
и недостатки этой системы, на каких принципах
основывается организация информации
и как поддерживать систему в стабильном
состоянии, какие возможности предлагает
NTFS и как они могут быть использованы обычным
пользователем.