Файловые потоки
Классы файловых потоков :
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& read( char *p, int n);
istream& read( signed char *p, int n);
istream& read( unsigned char *p, int n);
// Запись указанного количества символов (байтов)
// из буфера в поток
ostream& write( char *p, int n);
ostream& write( signed char *p, int n);
ostream& write(unsigned char *p, int n);
// Чтение-запись символа из потока
istream& get( char &p);
istream& get( signed char &p);
istream& get( unsigned char &p);
ostream& put( char c);
// Чтение строки из потока (n-длина, c-ограничитель,
// из потока не извлекается)
istream& get(char *p, int n, char c='\n');
// Чтение строки из потока (n-длина, c-ограничитель,
// из потока извлекается, в буфер не пишется)
istream& getline(char *p, int n, char c='\n');
// Пропуск n символов при вводе (c - ограничитель,
// извлекается из потока)
istream& ignore(int n=1, int d=EOF);
// Число символов, прочитанных последней функцией
// неформатированного ввода
int gcount();
// Чтение символа без извлечения из потока
int peek();
// Возвращение символа во входной поток
istream& putback(char c);
// Позиционирование в потоке и чтение текущей позиции
enum ios::seek_dir
{
beg = 0, // От начала файла
cur = 1, // От текущей позиции
end = 2 // От конца файла
};
typedef long streampos;
typedef long streamoff;
istream& seekg(streampos);
istream& seekg(streamoff, ios::seek_dir);
ostream& seekp(streampos);
ostream& seekp(streamoff, ios::seek_dir);
streampos istream::tellg();
streampos ostream::tellp();