std::basic_filebuf<CharT,Traits>::close
std::basic_filebuf<CharT, Traits>* close(); |
Если существует область записи (например, файл открыт для записи), сначала вызывает overflow(Traits::eof()), чтобы записать в файл все ожидающие вывода данные, включая последовательности сброса состояния.
Если последней вызванной функцией из underflow(), overflow(), seekpos() и seekoff() была overflow(), то вызывает std::codecvt::unshift(), возможно, несколько раз, чтобы определить последовательность сброса состояния в соответствии с используемой локалью, и записывает эту последовательность в файл с помощью overflow(Traits::eof()).
Затем закрывает файл, как если бы была вызвана std::fclose(), независимо от того, завершились ли успешно или с ошибкой предыдущие вызовы.
Если любой из выполненных вызовов функций, включая вызов std::fclose(), завершается ошибкой, возвращает нулевой указатель. Если любой из выполненных вызовов функций выбрасывает исключение, оно перехватывается и повторно выбрасывается после закрытия файла. Если файл уже закрыт, сразу возвращает нулевой указатель.
В любом случае обновляет закрытую переменную-член, доступ к которой осуществляется через is_open().
Параметры
(нет)
Возвращаемое значение
this при успехе, нулевой указатель при ошибке.
Примечания
close() обычно вызывается деструктором std::basic_filebuf (который, в свою очередь, обычно вызывается деструктором std::basic_fstream.
Пример
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применяется к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| 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/cpp/io/basic_filebuf/close