std:: freopen
|
Definido en el encabezado
<cstdio>
|
||
|
std::
FILE
*
freopen
(
const
char
*
filename,
const
char
*
mode,
std::
FILE
*
stream
)
;
|
||
Primero, intenta cerrar el archivo asociado con stream , ignorando cualquier error. Luego, si filename no es nulo, intenta abrir el archivo especificado por filename usando mode como si fuera mediante std::fopen , y asocia ese archivo con el flujo de archivo apuntado por stream . Si filename es un puntero nulo, entonces la función intenta reabrir el archivo que ya está asociado con stream (está definido por la implementación qué cambios de modo están permitidos en este caso).
Contenidos |
Parámetros
| filename | - | nombre de archivo para asociar al flujo de archivo |
| mode | - | cadena de caracteres terminada en nulo que determina el nuevo modo de acceso al archivo |
| stream | - | el flujo de archivo a modificar |
Banderas de acceso a archivos
|
Cadena de modo de acceso
a archivo |
Significado | Explicación |
Acción si el archivo
ya existe |
Acción si el archivo
no existe |
|---|---|---|---|---|
| "r" | lectura | Abrir un archivo para lectura | leer desde el inicio | retornar NULL y establecer error |
| "w" | escritura | Crear un archivo para escritura | destruir contenido | crear nuevo |
| "a" | anexar | Anexar a un archivo | escribir al final | crear nuevo |
| "r+" | lectura extendida | Abrir un archivo para lectura/escritura | leer desde el inicio | retornar NULL y establecer error |
| "w+" | escritura extendida | Crear un archivo para lectura/escritura | destruir contenido | crear nuevo |
| "a+" | anexar extendido | Abrir un archivo para lectura/escritura | escribir al final | crear nuevo |
|
La bandera de modo de acceso a archivo
"b"
puede especificarse opcionalmente para abrir un archivo
en modo binario
. Esta bandera no tiene efecto en sistemas POSIX, pero en Windows, por ejemplo, desactiva el manejo especial de
'
\n
'
y
'
\x1A
'
.
En los modos de acceso de anexado, los datos se escriben al final del archivo independientemente de la posición actual del indicador de posición del archivo. |
||||
| La bandera de modo de acceso a archivo "x" puede anexarse opcionalmente a los especificadores "w" o "w+" . Esta bandera fuerza a la función a fallar si el archivo existe, en lugar de sobrescribirlo. (C++17) | ||||
| El comportamiento es indefinido si el modo no es una de las cadenas listadas arriba. Algunas implementaciones definen modos adicionales soportados (ej. Windows ). | ||||
Valor de retorno
stream en caso de éxito, un puntero nulo en caso de fallo.
Notas
std::freopen es la única manera de cambiar la orientación estrecha/amplia de un flujo una vez que ha sido establecida por una operación de E/S o por std::fwide .
La versión de Microsoft CRT de
std::freopen
no admite ningún cambio de modo cuando
filename
es un puntero nulo y trata esto como un error (consulte la
documentación
). Una posible solución alternativa es la función no estándar
_setmode()
.
Ejemplo
El siguiente código redirige
stdout
a un archivo.
#include <cstdio> int main() { std::printf("stdout is printed to console\n"); if (std::freopen("redir.txt", "w", stdout)) { std::printf("stdout is redirected to a file\n"); // this is written to redir.txt std::fclose(stdout); } }
Salida:
stdout is printed to console
Véase también
|
abre un archivo
(función) |
|
|
cierra un archivo
(función) |
|
|
Documentación C
para
freopen
|
|