std::basic_filebuf<CharT,Traits>:: open
|
basic_filebuf
*
open
(
const
char
*
s,
std::
ios_base
::
openmode
mode
)
;
|
(1) | |
|
basic_filebuf
*
open
(
const
std::
string
&
str,
std::
ios_base
::
openmode
mode
)
;
|
(2) | (desde C++11) |
|
basic_filebuf
*
open
(
const
std::
filesystem
::
path
&
p,
std:: ios_base :: openmode mode ) ; |
(3) | (desde C++17) |
|
basic_filebuf
*
open
(
const
std
::
filesystem
::
path
::
value_type
*
s,
std:: ios_base :: openmode mode ) ; |
(4) | (desde C++17) |
Si el archivo asociado ya estaba abierto ( is_open ( ) ! = false ), retorna un puntero nulo inmediatamente.
De lo contrario, abre el archivo con el nombre dado ( s , p. c_str ( ) (desde C++17) o str. c_str ( ) , dependiendo de la sobrecarga). Los valores std::ios_base::openmode pueden escribirse como, por ejemplo, std:: ios_base :: out | std:: ios_base :: app .
|
La sobrecarga
(4)
solo se proporciona si
|
(desde C++17) |
El archivo se abre como si se llamara a
std::fopen
con el segundo argumento (modo de acceso al archivo) determinado por el resultado de
mode
&
~
std::
ios_base
::
ate
como sigue,
open()
falla si el resultado no es alguna combinación de banderas mostradas en la tabla:
| mode & ~ std:: ios_base :: ate |
std::fopen
modo de acceso |
Acción si el archivo ya existe | Acción si el archivo no existe | |||||
|---|---|---|---|---|---|---|---|---|
| binary | in | out | trunc | app |
noreplace
(desde C++23) |
|||
| - | + | - | - | - | - | "r" | Leer desde el inicio | Error al abrir |
| + | + | - | - | - | - | "rb" | ||
| - | + | + | - | - | - | "r+" | Error | |
| + | + | + | - | - | - | "r+b" | ||
| - | - | + | - | - | - | "w" | Destruir contenidos | Crear nuevo |
| - | - | + | + | - | - | |||
| + | - | + | - | - | - | "wb" | ||
| + | - | + | + | - | - | |||
| - | + | + | + | - | - | "w+" | ||
| + | + | + | + | - | - | "w+b" | ||
| - | - | + | - | - | + | "wx" | Error al abrir | Crear nuevo |
| - | - | + | + | - | + | |||
| + | - | + | - | - | + | "wbx" | ||
| + | - | + | + | - | + | |||
| - | + | + | + | - | + | "w+x" | ||
| + | + | + | + | - | + | "w+bx" | ||
| - | - | + | - | + | - | "a" | Escribir al final | Crear nuevo |
| - | - | - | - | + | - | |||
| + | - | + | - | + | - | "ab" | ||
| + | - | - | - | + | - | |||
| - | + | + | - | + | - | "a+" | ||
| - | + | - | - | + | - | |||
| + | + | + | - | + | - | "a+b" | ||
| + | + | - | - | + | - | |||
Si la operación de apertura tiene éxito y
(
openmode
&
std::
ios_base
::
ate
)
!
=
0
(el bit
ate
está activado), reposiciona la posición del archivo al final del mismo, como si se llamara a
std::
fseek
(
file,
0
,
SEEK_END
)
, donde
file
es el puntero devuelto al llamar a
std::fopen
. Si el reposicionamiento falla, llama a
close()
y devuelve un puntero nulo para indicar el fallo.
Contenidos |
Parámetros
| s, str, p | - | el nombre del archivo a abrir; s debe apuntar a una cadena terminada en nulo |
| openmode | - | el modo de apertura del archivo, un OR binario de los modos std::ios_base::openmode |
Valor de retorno
this en caso de éxito, un puntero nulo en caso de fallo.
Notas
open()
normalmente se llama a través del constructor o la función miembro
open()
de
std::basic_fstream
.
Ejemplo
#include <fstream> #include <iostream> int main() { std::string filename = "Test.b"; std::filebuf fb; // preparar un archivo para lectura double d = 3.14; if (!fb.open(filename, std::ios::binary | std::ios::out)) { std::cout << "La apertura del archivo " << filename << " para escritura falló\n"; return 1; } fb.sputn(reinterpret_cast<char*>(&d), sizeof d); fb.close(); // abrir archivo para lectura double d2 = 0.0; if (!fb.open(filename, std::ios::binary | std::ios::in)) { std::cout << "La apertura del archivo " << filename << " para lectura falló\n"; return 1; } auto got = fb.sgetn(reinterpret_cast<char*>(&d2), sizeof d2); if (sizeof(d2) != got) std::cout << "La lectura de " << filename << " falló\n"; else std::cout << "Lectura recuperada del archivo: " << d2 << '\n'; }
Salida:
Lectura recuperada del archivo: 3.14
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 596 | C++98 |
open()
no podía abrir archivos en modo append
|
puede abrir en modo append |
Véase también
|
verifica si el archivo asociado está abierto
(función miembro pública) |
|
|
vacía el búfer del área de escritura y cierra el archivo asociado
(función miembro pública) |