Как закрыть файл в с
Перейти к содержимому

Как закрыть файл в с

  • автор:

Как закрыть файл в с

Для работы с файлами в стандартной библиотеке определен заголовочный файл fstream , который определяет базовые типы для чтения и записи файлов. В частности, это:

ifstream : для чтения с файла

ofstream : для записи в файл

fstream : совмещает запись и чтение

Для работы с данными типа wchar_t для этих потоков определены двойники:

Открытие файла

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

Для открытия файла в функцию необходимо передать путь к файлу в виде строки. И также можно указать режим открытия. Список доступных режимов открытия файла:

ios::in : файл открывается для ввода (чтения). Может быть установлен только для объекта ifstream или fstream

ios::out : файл открывается для вывода (записи). При этом старые данные удаляются. Может быть установлен только для объекта ofstream или fstream

ios::app : файл открывается для дозаписи. Старые данные не удаляются.

ios::ate : после открытия файла перемещает указатель в конец файла

ios::trunc : файл усекается при открытии. Может быть установлен, если также установлен режим out

ios::binary : файл открывается в бинарном режиме

Если при открытии режим не указан, то по умолчанию для объектов ofstream применяется режим ios::out , а для объектов ifstream — режим ios::in . Для объектов fstream совмещаются режимы ios::out и ios::in .

Однако в принципе необязательно использовать функцию open для открытия файла. В качестве альтернативы можно также использовать конструктор объектов-потоков и передавать в них путь к файлу и режим открытия:

При вызове конструктора, в который передан путь к файлу, данный файл будет автоматически открываться:

Вообще использование конструкторов для открытия потока является более предпочтительным, так как определение переменной, представляющей файловой поток, уже преполагает, что этот поток будет открыт для чтения или записи. А использование конструктора избавит от ситуации, когда мы забудем открыть поток, но при этом начнем его использовать.

В процессе работы мы можем проверить, окрыт ли файл с помощью функции is_open() . Если файл открыт, то она возвращает true:

Закрытие файла

После завершения работы с файлом его следует закрыть с помощью функции close() . Также стоит отметить, то при выходе объекта потока из области видимости, он удаляется, и у него автоматически вызывается функция close.

Стоит отметить, что при компиляции через g++ следует использовать флаг -static , если программа работает со файлами и использует типы из заголовочного файла fstream:

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

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

ifstream in; // ввод

ofstream out; // вывод

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

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

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

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

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

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

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

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

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

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

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

Атрибут Значение
0 Нормальный файл, отрытый доступ
1 Файл только для чтения
2 Скрытый файл
4 Системный файл
8 Архивный файл

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

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

ofstream out;
out.open ( «test», ios::out, 0);

Тем не менее, практически никогда не бывает подобного вызова функции ореn(), поскольку оба параметра имеют значения по умолчанию: для 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.

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

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

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

ifstream mystream(«myfile»); // открытие файла для чтения
if (!mystream) <
cout << «Cannot open file.\n»; // обработка ошибки
>

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

Закрытие файла: fclose( )

Просто используйте функцию fclose( ). Заметим, что аргументом ее является in, указатель на файл, а не test, имя файла.

Для программы, более серьезной, чем эта, следовало бы посмотреть, успешно ли закрыт файл. Функция fclose( ) возвращает значение 0, если файл закрыт успешно, и -1 в противном случае.

Читайте также

Закрытие файла

Закрытие файла Для закрытия объектов любого типа, объявления недействительными их дескрипторов и освобождения системных ресурсов почти во всех случаях используется одна и та же универсальная функция. Исключения из этого правила будут оговариваться отдельно. Закрытие

Установка размера файла, инициализация файла и разреженные файлы

Установка размера файла, инициализация файла и разреженные файлы Функция SetEndOfFile позволяет переустановить размер файла, используя текущее значение указателя файла для определения его размера. Возможно как расширение, так и усечение файла. В случае расширения файла

11.2.2. Закрытие файлов

11.2.2. Закрытие файлов Одной из операций, которые одинаковы для файлов всех типов, является закрытие файла. Ниже показано, как закрыть файл.#include &lt;unistd.h&gt;int close(int fd);Очевидно, что это базовая операция. Однако есть один важный момент, касающийся закрытия файлов, о котором

Закрытие файла

Закрытие файла fcloseЗакрывает файл, открытый предварительно функцией fopen().Синтаксис:int fclose(int $fp)Возвращает false, если файл закрыть не удалось (например, что-то с ним случилось или же разорвалась связь с удаленным хостом). В противном случае возвращает значение "истина".Всегда

5.12.4 Закрытие каналов

5.12.4 Закрытие каналов При закрытии канала процесс выполняет ту же самую процедуру, что и при закрытии обычного файла, за исключением того, что ядро, прежде чем освободить индекс канала, выполняет специальную обработку. Оно уменьшает количество процессов чтения из канала

10.6 Закрытие соединения

10.6 Закрытие соединения Нормальное завершение соединения выполняется с помощью той же процедуры тройного рукопожатия, что и при открытии соединения. Каждая из сторон может начать закрытие соединения по следующему сценарию:A: "Я закончил работу. Данных для пересылки

12. Закрытие продаж

12. Закрытие продаж Как только 36 часов истекли, вешаем на сайт сообщение: «Регистрация закончена». Вот что вы пропустили. Можно сказать, вам не повезло. Рассказываем о бонусах, про которые в тексте рекламы не говорили – чтобы для людей, которые не успели, это стало уроком. Вы

ПРОСТЫЕ ПРОГРАММЫ ЧТЕНИЯ ФАЙЛА: fopen( ), fclose( ), getc( ) и putc( )

ПРОСТЫЕ ПРОГРАММЫ ЧТЕНИЯ ФАЙЛА: fopen( ), fclose( ), getc( ) и putc( ) Чтобы показать элементарные примеры использования файлов, мы составили небольшую программу, которая читает содержимое файла, названного test, и выводит его на экран. Вы найдете наши пояснения сразу после

Б.1.2. Закрытие файла

Б.1.2. Закрытие файла По окончании работы с файлом его следует закрыть с помощью функции close(). В ряде случаев, например в программе, показанной в листинге Б.1, нет необходимости вызывать данную функцию явно, так как ОС Linux автоматически закрывает все открытые файлы по

Закрытие потоков

Закрытие потоков Функции fclose и fcloseall закрывают поток или потоки. Функция fclose закрывает один заданный поток, fcloseall — все потоки, кроме потоков stdin, stdout, stderr, stdaux, stdprn.Если программа не выполняет закрытия потоков, потоки автоматически закрываются, когда программа завершается

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

Закрытие файлов Функция close закрывает открытые файлы. Открытые файлы также автоматически закрываются при неаварийном завершении

Закрытие процесса

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

Закрытие файлов После того, как вы поработали с файлом, его надо закрыть. Класс CFile имеет для этого специальный метод Close:virtual void Close() throw(CFileException);Метод закрывает файл. Если вы создали объект класса CFile и открыли файл, а затем объект удаляется, то связанный с ним файл

Закрытие PGP диска.

Закрытие PGP диска. Закройте все программы и файлы, имеющиеся на диске PGP, т.к. невозможно закрыть диск, если файлы на этом диске до сих пор еще открыты. Теперь зайдите в мой компьютер выделите мышкой диск PGP, нажмите на правую кнопку мышки и выберите команду &lt;unmount&gt; в

C++. Файловая система C++. Общие принципы работы. Примеры. Открытие/закрытие файла

Файловая система C++. Общие принципы работы. Примеры. Открытие/закрытие файла

Содержание

  • 1. Подключение доступа к классам организации работы с файловой системой C++
  • 2. Создание файлового потока. Каким образом осуществляется связь потока с файлом? Функция open()
  • 3. Способы открытия файла. Функция openmode()
  • 4. Функция is_open() . Проверка открытия файла. Пример
  • 5. Функция close() . Закрытие файла. Пример
  • 6. Примеры открытия/закрытия файла функцией open() . Проверка открытия файла функцией is_open()

Поиск на других ресурсах:

1. Подключение доступа к классам организации работы с файловой системой C++

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

В этом модуле реализованы основные классы для работы с файловой системой:

  • ifstream – используется для организации ввода из файлового потока;
  • ofstream – используется для организации вывода в файл (файловый поток);
  • fstream – используется для обеспечения ввода/вывода.
2. Создание файлового потока. Каким образом осуществляется связь потока с файлом? Функция open()

Чтобы создать файловый поток нужно объявить экземпляр одного из классов ifstream , ofstream или fstream

Созданный поток связывается с файлом с помощью функции open() , которая имеет различные реализации в разных классах.

В классе ifstream функция open() имеет следующий прототип

  • filename – имя открываемого файла. Имя может быть полным или сокращенным, например, «myfile.txt» ;
  • mode – способ открытия файла. Этот параметр принимает значение ios::in , которое описывается в функции openmode() . Значение ios::in означает, что файл открывается только для ввода.

В классе ofstream функция open() имеет следующий прототип

  • filename – имя открываемого файла;
  • mode – параметр, который задает способ открытия файла. В этом параметре значение ios::out означает, что файл открывается для вывода. Значение ios::trunc означает, что предшествующее содержимое существующего файла с таким самым именем будет удалено, а длина файла станет равной нулю.

В классе fstream прототип функции open() следующий

  • filename – имя файла;
  • mode – параметр, который задает способ открытия файла. Как видно из значения параметра mode , файл открывается и для записи и для чтения.
3. Способы открытия файла. Функция openmode()

Способы открытия файла могут быть разными. Значения, которые описывают способы открытия файла, реализованы в функции openmode() . Ниже приведены значения, которые могут возвращаться функцией openmode() и объяснение к ним:

  • ios::app – записываемые данные дописываются в конец файла;
  • ios::ate – при открытии файла происходит поиск конца файла. Но запись в файл может осуществляться в любое место этого файла;
  • ios::binary – позволяет открыть файл в бинарном (двоичном) режиме. Существует два режима открытия файла: текстовый и бинарный. По умолчанию файлы открываются в текстовом режиме;
  • ios::in – файл открывается для ввода (происходит чтение из файла);
  • ios::out – файл открывается для вывода (происходит запись в файл);
  • ios::trunc – означает, что предыдущее содержимое существующего файла с таким самым именем будет удалено, а длина файла станет равной нулю. Если открыть поток вывода с помощью класса ofstream все содержимое файла с тем же именем стирается.

Способы открытия файла можно комбинировать между собою с помощью операции | (побитовое ИЛИ).

Пример. Способы открытия файла.

4. Функция is_open() . Проверка открытия файла. Пример

Функция is_open() предназначена для проверки, закрыт ли файл или нет. Эта функция реализована в классах ifstream , ofstream и fstream .

Функция имеет следующий прототип:

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

Пример. Демонстрируется определение открытия файла для объекта os класса ofstream . Если файл открыт, то этот файл закрывается.

5. Функция close() . Закрытие файла. Пример

Чтобы закрыть файл, нужно вызвать функцию close() .

Например. Далее продемонстрировано открытие и закрытие файла для потока ifstream

6. Примеры открытия/закрытия файла функцией open() . Проверка открытия файла функцией is_open()

Открыть файл можно одним из двух способов:

  • с помощью функции open() ;
  • с помощью конструктора класса (см. примеры ниже).

Если файл открыт, то можно реализовывать роботу с этим файлом. Возможна ситуация, что файл не будет открыт после вызова функции f_open() . В этом случае в программе нужно реализовать соответствующую проверку.

Корректность открытия файла можно реализовать одним из двух нижеследующих способов:

  • с помощью соответствующей проверки оператором условного перехода if ;
  • с помощью функции is_open() .

Пример 1. Открытие файла для вывода (записи).

Пример 2. Открытие файла для ввода (чтения)

Пример 3. Открытие файла для вывода (записи). Использование функции is_open() .

Пример 4. Открытие файла для ввода (чтения). Использование функции is_open() .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *