русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Открытие и закрытие файлов


Дата добавления: 2013-12-23; просмотров: 1320; Нарушение авторских прав


В C++ файл открывается путем связывания его с потоком. Имеется три типа потоков: ввода, вывода и ввода/вывода. Для открытия потока ввода необходимо объявить поток как объект класса ifstream. Для открытия потока вывода необходимо объявить его как объект класса ofstream. Потоки, кото­рые выполняют как ввод, так и вывод, должны быть объявлены как объекты класса fstream. На­пример, следующий фрагмент программы создает один поток ввода, один поток вывода и один поток, способный выполнять как ввод, так и вывод:

ifstream in; // ввод

ofstream out; // вывод

fstream both; // ввод и вывод

После создания потока единственным способом ассоциировать его с файлом является исполь­зование функции open(). Эта функция является членом каждого из трех классов потока. Она имеет следующий прототип:

void open(const char *filename, int mode, int access=filebuf::openprot);

Здесь filename является именем файла и может включать указание пути. Величина mode определя­ет, каким способом открывается файл. Mode может принимать одно или более из следующих значений, (определенных в заголовочном файле ios.h):

ios::app

ios::ate

ios::binary

ios::in

ios::nocreate

ios::noreplace

ios::out

ios::trunc

Можно комбинировать два и более из этих значений, используя побитовое ИЛИ.

ios::app указывает на то, что выводимые данные будут добавляться в конец файла. Это значение может быть использовано только для файлов, для которых возможен вывод. Использование ios::ate вызывает поиск конца файла в момент открытия файла.

ios::in задает возможность ввода из файла. ios::out указывает, что файл предназначен для выво­да. Однако создание потока с использованием ifstream задает режим ввода, а создание потока с использованием ofstream задает режим вывода, и в этих случаях нет необходимости задавать ука­занные выше величины.



ios::nocreate задает такой режим, при котором функция open() может открыть только существу­ющий файл. ios::noreplace нe позволяет функции open() открыть файл, если он уже существует, но не указаны атрибуты ios::ate или ios::app.

ios::trunc предусматривает уничтожение содержимого файла с заданным именем и усечение дли­ны файла до нуля.

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

Величина access определяет, каким образом осуществляется доступ к файлу. Эта величина соответствует коду атрибута файла в системе DOS/Windows. Значения атрибута файлов определяются следующим образом:

Атрибут Значение

0 Обычный файл, отрытый доступ

1 Файл только для чтения

2 Скрытый файл

4 Системный файл

8 Архивный файл

С помощью операций побитового ИЛИ можно задать одновременно несколько атрибутов. Обычно эти атрибуты оставляются по умолчанию, что соответствует filebuf::openprot и соответ­ствует нормальному файлу.

В следующем фрагменте открывается нормальный файл для вывода:

ofstream out;

out.open("test", ios::out, 0);

Тем не менее, практически никогда не бывает подобного вызова функции open(), поскольку два последних параметра имеют значения по умолчанию: для ifstream значением по умолчанию mode служит ios::in; а для ofstream значение по умолчанию равно ios::out. Параметр доступа access по умолча­нию соответствует нормальному файлу, как это уже отмечалось выше. Поэтому предыдущая инст­рукция будет выглядеть следующим образом:

out.open("test"); // значения по умолчанию для вывода и обычного файла

Для того чтобы открыть поток одновременно для ввода и вывода, необходимо задать обе вели­чины ios::in и ios::out для режима mode, как показано в следующем примере:

fstream mystream;

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

Если функции open() не удается открыть поток, то поток остается равным NULL.

Хотя открытие файла с использованием функции open() является вполне допустимым, в боль­шинстве случаев так не делается, потому что классы ifstream, ofstream и fstream содержат конст­рукторы, автоматически открывающие файл. Конструкторы имеют те же параметры и значения по умолчанию, что и функция open(). Поэтому наиболее типичный способ открытия файла вы­глядит следующим образом:

ifstream mystream("myfile"); // открытие файла для чтения

Если по каким-либо причинам файл не может быть открыт, значение ассоциированного потока будет равно NULL. Можно использовать следующий код для того, чтобы убедиться, что файл действительно открыт:

ifstream mystream("myfile");

if (!mystream) {

{

cout << "Cannot open file\n";

// обработка ошибки

}

Для того чтобы закрыть файл, следует использовать функцию-член close(). Например, чтобы закрыть файл, связанный с потоком mystream, используется следующая инструкция:

mystream.close();

Функция close() не имеет ни параметров, ни возвращаемого значения.



<== предыдущая лекция | следующая лекция ==>
Создание манипуляторов с параметрами | Чтение и запись в текстовые файлы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.