Информатика и технология программирования

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


Классы файловых потоков :


ifstream - файл ввода, производный от istream
ofstream - файл вывода, производный от ostream
fstream - файл ввода-вывода, производный от iostream

Флаги режимов работы с файлом :


enum ios::open_mode
{
in = 0x01, // Открыть файл только для чтения


out = 0x02, // Открыть файл только для записи


ate = 0x04, // При открытии позиционироваться в конец файла


app = 0x08, // Открыть существующий для дополнения


trunc = 0x10, // Создание нового файла взамен существующего


nocreate=0x20, // Не создавать новый файл при его отсутствии


noreplace=0x40, // Не создавать новый файл, если он существует


binary= 0x80 // Двоичный файл ("прозрачный" ввод-вывод без


// преобразования символов конца строки)


};



Конструкторы объектов (для классов ifstream,ofstream,fstream) и функции открытия/закрытия файлов :


ifstream(); // Без открытия файлов


ifstream( // С открытием файла в заданном


char *name, // режиме imode


int imode=ios::in,
int prot=filebuf::openprot);


ifstream(int fd); // С присоединенем файла с дескрип-


// тором fd


ifstream( // То же, с явно заданным буфером


int fd,
char *buf, int sz);


void ifstream::open(
char *name, // Открытие файла в заданном режиме


int imode=ios::in,
int prot=filebuf::openprot);


void close(); // Закрыть файл


void setbuf(
char *p,int sz); // Установить буфер потока


int fd(); // Дескриптор открытого в потоке файла


int is_rtl_open(); // 1 - файл открыт в потоке

Унаследованные переопределения операторов позволяют проверять наличие ошибок в потоках в виде :


fstream ss;


if (ss) ... или if (!ss) ...

Функции ввода-вывода данных файловых потоков (унаследованы из istream,ostream и iostream) :


// Чтение указанного количества символов (байтов)


// из потока в буфер


istream&#38 read( char *p, int n);
istream&#38 read( signed char *p, int n);
istream&#38 read( unsigned char *p, int n);


// Запись указанного количества символов (байтов)


// из буфера в поток


ostream&#38 write( char *p, int n);


ostream&#38 write( signed char *p, int n);
ostream&#38 write(unsigned char *p, int n);

// Чтение-запись символа из потока

istream&#38 get( char &#38p);
istream&#38 get( signed char &#38p);
istream&#38 get( unsigned char &#38p);
ostream&#38 put( char c);

// Чтение строки из потока (n-длина, c-ограничитель,

// из потока не извлекается)

istream&#38 get(char *p, int n, char c='\n');

// Чтение строки из потока (n-длина, c-ограничитель,

// из потока извлекается, в буфер не пишется)

istream&#38 getline(char *p, int n, char c='\n');

// Пропуск n символов при вводе (c - ограничитель,

// извлекается из потока)

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

// Число символов, прочитанных последней функцией

// неформатированного ввода

int gcount();

// Чтение символа без извлечения из потока

int peek();

// Возвращение символа во входной поток

istream&#38 putback(char c);

// Позиционирование в потоке и чтение текущей позиции

enum ios::seek_dir
{
beg = 0, // От начала файла

cur = 1, // От текущей позиции

end = 2 // От конца файла

};

typedef long streampos;
typedef long streamoff;

istream&#38 seekg(streampos);
istream&#38 seekg(streamoff, ios::seek_dir);
ostream&#38 seekp(streampos);
ostream&#38 seekp(streamoff, ios::seek_dir);
streampos istream::tellg();
streampos ostream::tellp();


Содержание раздела