Spec-Zone.ru › C++

std::basic_filebuf<CharT,Traits>::close

std::basic_filebuf<CharT, Traits>* close();

Если существует область записи (например, файл был открыт для записи), сначала вызывается overflow(Traits::eof()) для записи всех ожидающих данных в файл, включая любые последовательности unshift.

Если последней вызвавшей функцией из underflow(), overflow(), seekpos() и seekoff() была overflow(), то вызывается std::codecvt::unshift(), возможно многократно, для определения последовательности unshift в соответствии с локали, и эта последовательность записывается в файл с помощью overflow(Traits::eof()).

Затем файл закрывается так, как если бы был вызван std::fclose(), независимо от успеха или неудачи предыдущих вызовов.

Если любой из вызовов функций, включая вызов std::fclose(), завершается неудачно, возвращается нулевой указатель. Если любой из вызовов функций вызывает исключение, исключение перехватывается и повторно генерируется после закрытия файла. Если файл уже закрыт, возвращается нулевой указатель сразу.

В любом случае обновляется частная переменная члена, к которой обращается is_open().

Параметры

(нет)

Возвращаемое значение

this при успехе, нулевой указатель при ошибке.

Примечания

close() обычно вызывается через деструктор std::basic_filebuf (который, в свою очередь, обычно вызывается деструктором std::basic_fstream).

Пример

Отчеты об ошибках

Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применимо к Поведение при публикации Правильное поведение
LWG 443 C++98 файл был записан с использованием overflow(EOF) изменено на overflow(Traits::eof())
LWG 622 C++98 было неясно, как обработать исключение,
вызванное при закрытии
исключение перебрасывается повторно после закрытия файла

См. также

is_open
проверяет, открыт ли связанный файл
(публичная функция-член)
(деструктор)
[виртуальный]
разрушает объект basic_filebuf и закрывает файл, если он открыт
(виртуальная публичная функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_filebuf/close

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API