175 lines
7.2 KiB
Markdown
175 lines
7.2 KiB
Markdown
[filebuf.members]
|
||
|
||
# 31 Input/output library [[input.output]](./#input.output)
|
||
|
||
## 31.10 File-based streams [[file.streams]](file.streams#filebuf.members)
|
||
|
||
### 31.10.3 Class template basic_filebuf [[filebuf]](filebuf#members)
|
||
|
||
#### 31.10.3.4 Member functions [filebuf.members]
|
||
|
||
[ð](#lib:is_open,basic_filebuf)
|
||
|
||
`bool is_open() const;
|
||
`
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11209)
|
||
|
||
*Returns*: true if a previous call toopen succeeded (returned a non-null value) and there has been no intervening
|
||
call to close[.](#1.sentence-1)
|
||
|
||
[ð](#lib:open,basic_filebuf)
|
||
|
||
`basic_filebuf* open(const char* s, ios_base::openmode mode);
|
||
basic_filebuf* open(const filesystem::path::value_type* s,
|
||
ios_base::openmode mode); // wide systems only; see [[fstream.syn]](fstream.syn "31.10.1 Header <fstream> synopsis")
|
||
`
|
||
|
||
[2](#2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11226)
|
||
|
||
*Preconditions*: s points to an NTCTS ([[defns.ntcts]](defns.ntcts "3.36 NTCTS"))[.](#2.sentence-1)
|
||
|
||
[3](#3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11230)
|
||
|
||
*Effects*: Ifis_open() != false,
|
||
returns a null pointer[.](#3.sentence-1)
|
||
|
||
Otherwise,
|
||
initializes thefilebuf as required[.](#3.sentence-2)
|
||
|
||
It then opens
|
||
the file to which s resolves, if possible,
|
||
as if by a call to fopenwith the second argument determined frommode & ~ios_base::ate as indicated in Table [146](#tab:filebuf.open.modes "Table 146: File open modes")[.](#3.sentence-3)
|
||
|
||
If mode is not some combination of flags shown in the table then
|
||
the open fails[.](#3.sentence-4)
|
||
|
||
Table [146](#tab:filebuf.open.modes) — File open modes [[tab:filebuf.open.modes]](./tab:filebuf.open.modes)
|
||
|
||
| [ð](#tab:filebuf.open.modes-row-1)<br>ios_base flag combination | | | | | | stdio equivalent |
|
||
| --- | --- | --- | --- | --- | --- | --- |
|
||
| [ð](#tab:filebuf.open.modes-row-2)<br>binary | in | out | trunc | app | noreplace |
|
||
| [ð](#tab:filebuf.open.modes-row-3) | | + | | | | "w" |
|
||
| [ð](#tab:filebuf.open.modes-row-4) | | + | | | + | "wx" |
|
||
| [ð](#tab:filebuf.open.modes-row-5) | | + | + | | | "w" |
|
||
| [ð](#tab:filebuf.open.modes-row-6) | | + | + | | + | "wx" |
|
||
| [ð](#tab:filebuf.open.modes-row-7) | | + | | + | | "a" |
|
||
| [ð](#tab:filebuf.open.modes-row-8) | | | | + | | "a" |
|
||
| [ð](#tab:filebuf.open.modes-row-9) | + | | | | | "r" |
|
||
| [ð](#tab:filebuf.open.modes-row-10) | + | + | | | | "r+" |
|
||
| [ð](#tab:filebuf.open.modes-row-11) | + | + | + | | | "w+" |
|
||
| [ð](#tab:filebuf.open.modes-row-12) | + | + | + | | + | "w+x" |
|
||
| [ð](#tab:filebuf.open.modes-row-13) | + | + | | + | | "a+" |
|
||
| [ð](#tab:filebuf.open.modes-row-14) | + | | | + | | "a+" |
|
||
| [ð](#tab:filebuf.open.modes-row-15)<br>+ | | + | | | | "wb" |
|
||
| [ð](#tab:filebuf.open.modes-row-16)<br>+ | | + | | | + | "wbx" |
|
||
| [ð](#tab:filebuf.open.modes-row-17)<br>+ | | + | + | | | "wb" |
|
||
| [ð](#tab:filebuf.open.modes-row-18)<br>+ | | + | + | | + | "wbx" |
|
||
| [ð](#tab:filebuf.open.modes-row-19)<br>+ | | + | | + | | "ab" |
|
||
| [ð](#tab:filebuf.open.modes-row-20)<br>+ | | | | + | | "ab" |
|
||
| [ð](#tab:filebuf.open.modes-row-21)<br>+ | + | | | | | "rb" |
|
||
| [ð](#tab:filebuf.open.modes-row-22)<br>+ | + | + | | | | "r+b" |
|
||
| [ð](#tab:filebuf.open.modes-row-23)<br>+ | + | + | + | | | "w+b" |
|
||
| [ð](#tab:filebuf.open.modes-row-24)<br>+ | + | + | + | | + | "w+bx" |
|
||
| [ð](#tab:filebuf.open.modes-row-25)<br>+ | + | + | | + | | "a+b" |
|
||
| [ð](#tab:filebuf.open.modes-row-26)<br>+ | + | | | + | | "a+b" |
|
||
|
||
[4](#4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11280)
|
||
|
||
If the open operation succeeds andios_base::ate is set in mode,
|
||
positions the file to the end
|
||
(as if by calling fseek(file, 0, SEEK_END), wherefile is the pointer returned by calling fopen)[.](#4.sentence-1)[292](#footnote-292 "The macro SEEK_END is defined, and the function signatures fopen(const char*, const char*) and fseek(FILE*, long, int) are declared, in <cstdio>.")
|
||
|
||
[5](#5)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11297)
|
||
|
||
If the repositioning operation fails, callsclose() and returns a null pointer to indicate failure[.](#5.sentence-1)
|
||
|
||
[6](#6)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11302)
|
||
|
||
*Returns*: this if successful, a null pointer otherwise[.](#6.sentence-1)
|
||
|
||
[ð](#lib:open,basic_filebuf_)
|
||
|
||
`basic_filebuf* open(const string& s, ios_base::openmode mode);
|
||
basic_filebuf* open(const filesystem::path& s, ios_base::openmode mode);
|
||
`
|
||
|
||
[7](#7)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11315)
|
||
|
||
*Returns*: open(s.c_str(), mode);
|
||
|
||
[ð](#lib:close,basic_filebuf)
|
||
|
||
`basic_filebuf* close();
|
||
`
|
||
|
||
[8](#8)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11326)
|
||
|
||
*Effects*: Ifis_open() == false,
|
||
returns a null pointer[.](#8.sentence-1)
|
||
|
||
If a put area exists, callsoverflow(traits::eof()) to flush characters[.](#8.sentence-2)
|
||
|
||
If the last virtual member function called on*this (betweenunderflow,overflow,seekoff,
|
||
andseekpos)
|
||
wasoverflow then callsa_codecvt.unshift (possibly several times) to determine a termination sequence, inserts those
|
||
characters and callsoverflow(traits::eof()) again[.](#8.sentence-3)
|
||
|
||
Finally, regardless of whether any of the preceding calls fails or throws an
|
||
exception, the function closes the file
|
||
(as if by callingfclose(file))[.](#8.sentence-4)
|
||
|
||
If any of the calls made by the function, including fclose, fails,close fails by returning a null pointer[.](#8.sentence-5)
|
||
|
||
If one of these calls throws an
|
||
exception, the exception is caught and rethrown after closing the file[.](#8.sentence-6)
|
||
|
||
[9](#9)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11359)
|
||
|
||
*Postconditions*: is_open() == false[.](#9.sentence-1)
|
||
|
||
[10](#10)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11363)
|
||
|
||
*Returns*: this on success, a null pointer otherwise[.](#10.sentence-1)
|
||
|
||
[ð](#lib:native_handle,basic_filebuf)
|
||
|
||
`native_handle_type native_handle() const noexcept;
|
||
`
|
||
|
||
[11](#11)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11375)
|
||
|
||
*Preconditions*: is_open() is true[.](#11.sentence-1)
|
||
|
||
[12](#12)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L11379)
|
||
|
||
*Returns*: The native handle associated with *this[.](#12.sentence-1)
|
||
|
||
[292)](#footnote-292)[292)](#footnoteref-292)
|
||
|
||
The macro SEEK_END is defined, and the function signaturesfopen(const char*, const char*) andfseek(FILE*, long, int)are declared, in [<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]")[.](#footnote-292.sentence-1)
|