Программирование >>  Расширенная версия языка c++ 

1 ... 89 90 91 [ 92 ] 93 94 95 ... 227


ios::iu loiit. Значения режима открытия файла по умолчанию не поддерживаются. Это относится как к конструктору класса fstream, так и к функции ореп(). Например, при работе со старой библиотекой ввода/вывода С++, чтобы открыть файл для ввода и вывода с помощью функции ореп(), необходимо использовать следующую конструкцию:

fstream mystream;

mystream.open( test , ios::in j ios::out);

В современной библиотеке ввода/вывода C++, если режим открытия файла не указан, любой объект типа fstream автоматически открывает файл для ввода и вывода.

И последнее. При работе со старой библиотекой ввода/вывода к ошибке выполнения функции ореп() ведет значение режима открытия файла, равное ios::noncreate, если указанный файл не существует, или равное ios::noreplace, если, наоборот, указанный файл уже существует. В стандарте Standard C++ данные значения режима открытия файла не поддерживаются.


1. Напишите программу для копирования текстового файла. Эта программа должна подсчитывать число копируемых символов и выводить на экран полученный результат. Почему это число отличается от того, которое выводится при просмотре списка файлов каталога?

2. Напишите программу для заполнения информацией следующей таблицы в файле phone.

Исаа тон, 415 555-3423

Роберт Годдард, 213 555-2312

Энрико Ферми, 202 555-1111

3. Напишите программу для подсчета числа слов в файле. Для простоты считайте, что словом является все, имеющее с двух сторон пробелы.

4. Какие действия выполняет функция is open?

9.3. Неформатируемый двоичный ввод/вывод

Хотя текстовые файлы (т. е. файлы, информация в которых представлена в кодах ASCn, - примеч. пер.) полезны во многих ситуациях, у них нет гибкости неформатированных двоичных файлов. Неформатированные файлы содержат те самые исходные или сырые двоичные данные, которые непосредственно используются вашей программой, а не удобный для восприятия



человека текст, данные для которого транслируются операторами и Поэтому о неформатируемом вводе/выводе иногда говорят как о сыром (raw) вводе/выводе. В С++ дж двоичных файлов поддерживается широкий диапазон функций ввода/вывода. Эти функции дают возможность точно контролировать процессы считывания из файлов и записи в файлы.

На нижнем уровне двоичного ввода/вывода находятся функции get() и put(). С помощью функции-члена put() можно записать байт; а с помощью функции-члена get() - считать. Эти функции являются членами всех потоковых классов соответственно дж ввода и дж вывода. Функции get() и puf() имеют множество форм. Ниже приведен! их наиболее часто встречающиеся версии:

istream figet(cha сол);

ostream &put(char символ);

Функция get() считывает один символ из связанного с ней потока и передает его значение аргументу символ. Ее возвращаемым значением является ссылка на поток. При считывании символа конца файла функция возвратит вызывающему потоку значение false. Функция put() записывает символ в поток и возвращает ссылку на поток.

Дж считывания и записи блоков двоичных данных используются функции read() и write{), которые также явжются членами потоковых классов соответственно для ввода и для вывода. Здесь показаны их прототипы:

istream firead(char * буфер, streamsize члсло байт) ; ostream fiwrite(const char * буфер, streamsize чксло баят) ;

Функция считывает из вызывающего потока столько байтов, сколько

задано в аргументе число 6айт и передает их в буфер, определенный указателем буфер. Функция writeO записывает в соответствующий поток из буфера, который определен указателем буфер, заданное в аргументе числобайт число байтов. Значения типа streamsize представжют собой некоторую

форму целого.

Если конец файла достигнут до того, как было считано симво-

лов, выполнение функции read() просто прекращается, а в буфере оказывается столько символов, сколько их было в файле. Узнать, сколько символов было считано, можно с помощью другой функции-члена gcoant(), прототип которой приведен ниже:

streamsize gcountO ; -

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

Естественно, что при использовании функций, предназначенных для работы

с двоичными файлами, файлы обычно открывают в двоичном, а не в тек-



Пр11ме1Ы

1. В следующей программе на экран выводится содержимое файла. Используется функция get().

ttinclude -.-ObLieanO-

ttinclude <fstream> - .

using namespace std;

in (int argc, char *argv[]:

char ch;

if(argc!=2)

cout Содержое: <имя файла>\п ,

return 1;

} - >

ifstream in(argv[lj, ios::in ios: :binary) ; if(!in) {

cou Файл открыть невозможно\п ;

return

} . : . . : -..

while{! in.eof О) ( /*

in.get(ch);

cou ch;

} ii::-. .

in. close (); .

return 0;

2. В данной программе для записи в файл вводимых пользователем символов используется функция put(). Программа завершается при вводе знака доллара $.

#include <iostream>

ttinclude <fstream> --i t,

using namespace std;

режиме. Смысл этого понять легко, значение режима открытия файла ios::binary предотвращает какое бы то ни было преобразование символов. Это важно, когда в файле хранятся двоичные данные, например, целые, вещественные или указатели. Тем не менее, для файла, открытого в текстовом режиме, хотя в нем содержится только текст, двоичные функции также вполне доступны, но при этом помните о возможности нежелательного преобразования символов.



1 ... 89 90 91 [ 92 ] 93 94 95 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика