Здавалка
Главная | Обратная связь

Функции для работы с файлами.



void open(const char *fileName, int mode = знач_по_ум,int protection = знач_по_ум);

"Присоединяет" файловый поток к конкретному файлу.

fileName - имя уже существующего или создаваемого заново файла. Это строка, которая задает полное или сокращенное имя файла в формате, определенном операционной системой.

mode - режим открытия.

protection - защита файла.

Функция вызывается через объект любого из трех потоковых классов и записывает в него нуль в случае ошибки.

int close();

Функция очищает буфер потока, отсоединяет поток от файла и закрывает файл.

Примечание:Эта функция вызывается автоматически при завершении программы.

istream& istream::read(unsigned char *buf, int len);istream& istream::read(signed char *buf, int len);

Производит чтение блока символов.

len - максимальное число символов, которые должны быть извлечены из потока в буфер buf.

ostream& osteram::write(const unsigned char *buf, int n);ostream& osteram::write(const signed char *buf, int n);

Производит запись блока символов.

n - число символов, считая ноль-символ, которые должны быть помещены в поток из буфера buf.

int istream::get();istream& istream::get(unsigned char&);istream& istream::get(signed char&);

Извлекает один символ из потока.

ostream& ostream::put(char);

Помещает один символ в поток.

istream& istream::get(unsigned char *buf, int n, char c = '\n');istream& istream::get(signed char *buf, int n, char c = '\n');

Извлекает строку из потока.

Во всех вышеописанных функциях символы извлекаются и помещаются в буфер пока не будет найден символ-ограничитель, или не будет прочитано n символов, или не встретится конец файла. Ограничитель из потока не извлекается и в буфер не помещается.

istream& istream::getline(unsigned char *buf, int n, char c = '\n');istream& istream::getline(signed char *buf, int n, char c = '\n');

Данная функция выполняет то же, что и get, но ограничитель извлекается из потока (в буфер не заносится).

istream& istream::ignore(int n = 1, int d = EOF);

Данная функция извлекает символы из потока, пока не встретится ограничитель d или пока не извлечет n символов.

int istream::gcount();

Данная функция возвращает число символов, извлеченных последней функцией бесформатного ввода.

int istream::peek();

Данная функция позволяет "взглянуть" на очередной символ входного потока - возвращает код следующего символа потока (или EOF, если поток пуст), но оставляет этот символ в потоке. При необходимости этот символ можно извлечь из потока с помощью других средств библиотеки.

istream& istream::putback(char cc);

Данная функция не извлекает ничего из потока, а помещает в него символ cc, который становится текущим и будет следующим извлекаемым из потока символом.

istream& istream::seekg(long pos);

Данная функция устанавливает позицию чтения из потока в положение, определяемое значением параметра.

istream& istream::seekg(long off, ios::seek_dir dir);

Данная функция выполняет перемещение позиции чтения вдоль потока в направлении, опеределенном параметром dir, который принимает значение из перечисления enum seek_dir {beg, cur, end};. Относительная величина перемещения ( в байтах) определяется значением параметра long off. Если направление определено как beg, то смещение от начала потока; cur - от текущей позиции; end - от конца потока.

ostream& ostream::seekp(long pos);

Данная функция устанавливает абсолютную позицию записи в поток.

ostream& ostream::seekp(long off, ios::seek_dir dir);

Данная функция аналогична функции seekg(), но принадлежит классу ostream и выполняет относительное перемещение записи в поток.

long istream::tellg();

Данная функция определяет текущую позицию чтения из потока.

long ostream::tellp();

Данная функция определяет текущую позицию записи в поток.

Ну, что ж теории, пожалуй достаточно - пора переходить к практике. В следующих разделах урока мы рассмотрим несколько примеров.

Предыдущая Оглавление Следующая
Предыдущая Оглавление Следующая

Практический пример использования файлов в стиле С++.

Ну что ж, пора переходить к практике. Сейчас, мы с вами рассмотрим пример, который, используя средства языка С++, реализует возможность просмотра файла в шестнадцатиричном виде.

#include <iostream>#include <fstream>#include <iomanip>#include <string.h>#include <conio.h>using namespace std; // Максимальная длина пути к файлу#define MAX_PATH 260// Количество столбцов на экране#define NUM_COLS 18// Количество строк на экране #define NUM_ROWS 24 void main() { char path[MAX_PATH]; // Запрашиваем путь к файлу cout << "Input path to file: "; cin.getline(path, MAX_PATH); int counter = 0, i = 0, j = 0; char text[NUM_COLS]; // Открытие файла в двоичном режиме ifstream input(path, ios::in | ios::binary); if (!input) { cout << "Cannot open file for display!" << endl; return; } // Режим отображения в верхнем регистре для шестнадцатиричного вывода cout.setf(ios::uppercase); // Пока не конец файла, читаем из него данные // и производим форматированный вывод на экран while (!input.eof()) { // Посимвольное чтение for (i = 0; (i < NUM_COLS && !input.eof()); i++) input.get(text[i]); if (i < NUM_COLS) i--; for (j = 0; j < i; j++) if((unsigned)text[j] < 0x10) // Количество символов для отображения числа меньше двух? cout << setw(2) << 0 << hex << (unsigned) text[j]; else cout << setw(3) << hex << (unsigned) text[j]; // Выравнивание для незавершенной строки for (; j < NUM_COLS; j++) cout << " "; cout << "\t"; for (j = 0; j < i; j++) // Символ не является управляющим? if(text[j] > 31 && text[j] <= 255) cout << text[j]; else cout << "."; cout << "\n"; // Если экран уже заполнен, производим остановку if (++counter == NUM_ROWS) { counter = 0; cout << "Press any key to continue..." << flush; // Ожидаем нажатия любой клавиши getch(); cout << "\n"; } } // Закрываем файл input.close();}
Предыдущая Оглавление Следующая
Предыдущая Оглавление Следующая






©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.