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 | было неясно, как обработать исключение, вызванное при закрытии |
исключение перебрасывается повторно после закрытия файла |
См. также
| проверяет, открыт ли связанный файл (публичная функция-член) |
|
[виртуальный] |
разрушает объект 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