Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP2 (1).doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
350 Кб
Скачать
☆

Режимы открытия и их назначение

Режим открытия

Назначение

ios::in

Открыть файл для чтения

ios::out

Открыть файл для записи

ios::ate

Начало вывода устанавливается в конец файла

ios::app

Открыть файл для добавления в конец

ios::trunc

Усечь файл, то есть удалить его содержимое

ios::binary

Двоичный режим операций

Режимы открытия файла представляют собой битовые маски, поэтому можно задавать два или более режима, объединяя их побитовой операцией ИЛИ. В следующем фрагменте кода файл открывается для вывода с помощью функции open():

ofstream ofs;      ofs.open("FileName.dat");

Обратим внимание, что по умолчанию режим открытия файла соответствует типу файлового потока. У потока ввода или вывода флаг режима всегда установлен неявно. Например, для потока вывода в режиме добавления файла можно вместо оператора

ofstream ofs("FName.txt", ios::out | ios::app); написать      ofstream ofs("FName.txt", ios::app);

Между режимами открытия файла ios::ate и ios::app имеется небольшая разница.

Если файл открывается в режиме добавления, весь вывод в файл будет осуществляться в позицию, начинающуюся с текущего конца файла, безотносительно к операциям позиционирования в файле. В режиме открытия ios::ate (от английского "at end") можно изменить позицию вывода в файл и осуществлять запись, начиная с нее. Для потоков вывода режим открытия эквивалентен ios::out | ios::trunc, то есть можно опустить режим усечения файла. Однако для потоков ввода-вывода его нужно указывать явно. Файлы, которые открываются для вывода, создаются, если они еще не существуют.

Если открытие файла завершилось неудачей, объект, соответствующий потоку, будет возвращать 0:

if (!ofs){ cout << "Файл не открыт\n";}

Проверить успешность открытия файла можно также с помощью функции-члена is_open(), имеющей следующий прототип:

int is_open() const;

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

if (!ofs.is_open()){ cout << "Файл не открыт\n"; return; }

Если при открытии файла не указан режим ios::binary, файл открывается в текстовом режиме и после того, как файл успешно открыт, для выполнения операций ввода-вывода можно использовать операторы извлечения и вставки в поток. Для проверки, достигнут ли конец файла, можно использовать функцию ios::eof(), имеющую прототип int eof();

Завершив операции ввода-вывода, необходимо закрыть файл, вызвав функцию-член close() с прототипом void close():

ofs.close();

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

39)

40) long ftell (FILE *f);

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

int fseek – возвращает 0, если удалось переместить указатель и не0, если ошибка.

int fseek (FILE *f, long offset

int origin);

offset – смещение в байтах

int origin – с какой позиции задавать смещение

Константы: SEEK_SET с начала

SEEK_CUR текущее положение

SEEK_END с конца

fseek (f, i * size of (struct Record), SEEK_SET);

41)

42) по Alan Kay: 1) в программе всё является объектом; 2) вычисления имеют вид взаимодействия объектов. Взаимодействия происходят за счёт посылки или получения сообщений. Сообщение – это запрос на действие (быть может с параметрами ).3) каждый объект имеет собственную область памяти. 4) каждый объект явл. представителем класса, выражающего общее свойство объектов. 5)поведение объекта определяется классом, т.е объекты 1 класса могут выполнять одинаковые действия . 6) классы образуют единую древовидную структуру с общим корнем (иерархия наследования). Память и поведение объекта класса доступны любому классу, расположенному ниже в иерархическом дереве.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]