freopen, _wfreopenfreopen, _wfreopen

Reasigna un puntero de archivo.Reassigns a file pointer. Hay disponibles versiones más seguras de estas funciones; consulte freopen_s, _wfreopen_s.More secure versions of these functions are available; see freopen_s, _wfreopen_s.

SintaxisSyntax

FILE *freopen(
   const char *path,
   const char *mode,
   FILE *stream
);
FILE *_wfreopen(
   const wchar_t *path,
   const wchar_t *mode,
   FILE *stream
);

ParámetrosParameters

pathpath
Ruta de acceso del nuevo archivo.Path of new file.

modemode
Tipo de acceso permitido.Type of access permitted.

misionesstream
Puntero a la estructura FILE.Pointer to FILE structure.

Valor devueltoReturn Value

Cada una de estas funciones devuelve un puntero al archivo que se acaba de abrir.Each of these functions returns a pointer to the newly opened file. Si se produce un error, el archivo original se cierra y la función devuelve un valor de puntero nulo .If an error occurs, the original file is closed and the function returns a NULL pointer value. Si path, mode o Stream es un puntero nulo, o si filename es una cadena vacía, estas funciones invocan el controlador de parámetros no válidos, tal y como se describe en validación de parámetros.If path, mode, or stream is a null pointer, or if filename is an empty string, these functions invoke the invalid parameter handler, as described in Parameter Validation. Si la ejecución puede continuar, estas funciones establecen errno en EINVAL y devuelven null.If execution is allowed to continue, these functions set errno to EINVAL and return NULL.

Consulte _doserrno, errno, _sys_errlist y _sys_nerr para obtener más información sobre estos y otros códigos de error.See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on these, and other, error codes.

ObservacionesRemarks

Existen versiones más seguras de estas funciones, consulte freopen_s, _wfreopen_s.More secure versions of these functions exist, see freopen_s, _wfreopen_s.

La función freopen cierra el archivo asociado actualmente a Stream y reasigna Stream al archivo especificado por path.The freopen function closes the file currently associated with stream and reassigns stream to the file specified by path. _wfreopen es una versión con caracteres anchos de _freopen; los argumentos de modo y ruta de acceso a _wfreopen son cadenas de caracteres anchos._wfreopen is a wide-character version of _freopen; the path and mode arguments to _wfreopen are wide-character strings. _wfreopen y _freopen se comportan de manera idéntica._wfreopen and _freopen behave identically otherwise.

De forma predeterminada, el ámbito de este estado global de esta función es la aplicación.By default, this function's global state is scoped to the application. Para cambiar esto, vea estado global en CRT.To change this, see Global state in the CRT.

Asignaciones de rutina de texto genéricoGeneric-Text Routine Mappings

Rutina TCHAR.HTCHAR.H routine _UNICODE y _MBCS no definidos_UNICODE & _MBCS not defined _MBCS definido_MBCS defined _UNICODE definido_UNICODE defined
_tfreopen_tfreopen freopenfreopen freopenfreopen _wfreopen_wfreopen

freopen se suele usar para redirigir los archivos previamente abiertos stdin, stdout y stderr a los archivos especificados por el usuario.freopen is typically used to redirect the pre-opened files stdin, stdout, and stderr to files specified by the user. El nuevo archivo asociado a Stream se abre con el modo, que es una cadena de caracteres que especifica el tipo de acceso solicitado para el archivo, como se indica a continuación:The new file associated with stream is opened with mode, which is a character string specifying the type of access requested for the file, as follows:

modemode AccessAccess
c"r" Abre para lectura.Opens for reading. Si el archivo no existe o no se encuentra, se produce un error en la llamada a freopen .If the file does not exist or cannot be found, the freopen call fails.
con"w" Abre un archivo vacío para escritura.Opens an empty file for writing. Si el archivo especificado existe, se destruye su contenido.If the given file exists, its contents are destroyed.
un"a" Abre para escritura al final del archivo (anexo) sin eliminar el marcador de fin de archivo (EOF) antes de que se escriban nuevos datos en el archivo.Opens for writing at the end of the file (appending) without removing the end-of-file (EOF) marker before new data is written to the file. Crea el archivo si no existe.Creates the file if it does not exist.
"r +""r+" Abre para lectura y escritura.Opens for both reading and writing. El archivo debe existir.The file must exist.
"w +""w+" Abre un archivo vacío para lectura y escritura.Opens an empty file for both reading and writing. Si el archivo existe, se destruye su contenido.If the file exists, its contents are destroyed.
"a +""a+" Se abre para lectura y anexado.Opens for reading and appending. La operación de anexado incluye la eliminación del marcador EOF antes de que los nuevos datos se escriban en el archivo.The appending operation includes the removal of the EOF marker before new data is written to the file. El marcador EOF no se restablece una vez completada la escritura.The EOF marker is not restored after writing is completed. Crea el archivo si no existe.Creates the file if it does not exist.

Use los tipos "w" y "w +" con cuidado, ya que pueden destruir archivos existentes.Use the "w" and "w+" types with care, as they can destroy existing files.

Cuando un archivo se abre con el tipo de acceso "a" o "a +" , todas las operaciones de escritura tienen lugar al final del archivo.When a file is opened with the "a" or "a+" access type, all write operations take place at the end of the file. Aunque se puede cambiar la posición del puntero de archivo mediante fseek o rebobinar, el puntero de archivo siempre se desplaza al final del archivo antes de que se realice cualquier operación de escritura. Por lo tanto, los datos existentes no se pueden sobrescribir.Although the file pointer can be repositioned using fseek or rewind, the file pointer is always moved back to the end of the file before any write operation is carried out. Thus, existing data cannot be overwritten.

El modo "a" no quita el marcador EOF antes de anexar al archivo.The "a" mode does not remove the EOF marker before appending to the file. Una vez realizado el anexado, el comando TYPE de MS-DOS solo muestra los datos hasta el marcador EOF original, y no los datos anexados al archivo.After appending has occurred, the MS-DOS TYPE command only shows data up to the original EOF marker and not any data appended to the file. El modo "a +" quita el marcador EOF antes de anexar al archivo.The "a+" mode does remove the EOF marker before appending to the file. Después de anexar, el comando TYPE de MS-DOS muestra todos los datos del archivo.After appending, the MS-DOS TYPE command shows all data in the file. El modo "a +" es necesario para anexar a un archivo de secuencia que termina con el marcador EOF Ctrl + Z.The "a+" mode is required for appending to a stream file that is terminated with the CTRL+Z EOF marker.

Cuando se especifica el tipo de acceso "r +", "w +" o "a +" , se permiten la lectura y la escritura (se dice que el archivo está abierto para "actualización").When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for "update"). En cambio, si se cambia entre lectura y escritura, debe haber una operación intermedia fsetpos, fseek o rewind.However, when you switch between reading and writing, there must be an intervening fsetpos, fseek, or rewind operation. Si se desea, se puede especificar la posición actual para la operación fsetpos o fseek .The current position can be specified for the fsetpos or fseek operation, if desired. Además de los valores anteriores, se puede incluir uno de los siguientes caracteres en la cadena de modo para especificar el modo de traducción para las nuevas líneas.In addition to the above values, one of the following characters may be included in the mode string to specify the translation mode for new lines.

modificador de modomode modifier Modo de traducciónTranslation mode
tt Abra en modo de texto (traducido).Open in text (translated) mode.
bb Abrir en modo binario (sin traducir); se suprimen las traducciones que implican caracteres de retorno de carro y avance de línea.Open in binary (untranslated) mode; translations involving carriage-return and line feed characters are suppressed.

En el modo de texto (traducido), las combinaciones de retorno de carro y avance de línea (CR-LF) se traducen en caracteres de avance de línea (LF) en la entrada; Los caracteres de LF se traducen en combinaciones de CR-LF en la salida.In text (translated) mode, carriage return-line feed (CR-LF) combinations are translated into single line feed (LF) characters on input; LF characters are translated to CR-LF combinations on output. Además, CTRL+Z se interpreta como carácter de final de archivo en la entrada.Also, CTRL+Z is interpreted as an end-of-file character on input. En los archivos abiertos para lectura o para escritura y lectura con "a +", la biblioteca en tiempo de ejecución comprueba si hay un Ctrl + Z al final del archivo y lo quita, si es posible.In files opened for reading or for writing and reading with "a+", the run-time library checks for a CTRL+Z at the end of the file and removes it, if possible. Esto se hace porque el uso de fseek y ftell para desplace dentro de un archivo puede hacer que fseek se comporte de forma incorrecta cerca del final del archivo.This is done because using fseek and ftell to move within a file may cause fseek to behave improperly near the end of the file. La opción t es una extensión de Microsoft que no se debe usar si se desea disponer de portabilidad ANSI.The t option is a Microsoft extension that should not be used where ANSI portability is desired.

Si t o b no se especifican en el modo, el modo de traducción predeterminado se define mediante la variable global _fmode.If t or b is not given in mode, the default translation mode is defined by the global variable _fmode. Si t o b tiene como prefijo el argumento, la función produce un error y devuelve null.If t or b is prefixed to the argument, the function fails and returns NULL.

Para obtener una descripción de los modos de texto y binario, consulte E/S de archivo en modo texto y en modo binario.For a discussion of text and binary modes, see Text and Binary Mode File I/O.

RequisitosRequirements

FunciónFunction Encabezado necesarioRequired header
freopenfreopen <stdio.h>
_wfreopen_wfreopen <stdio.h> o <wchar.h><stdio.h> or <wchar.h>

La consola no se admite en aplicaciones de Plataforma universal de Windows (UWP).The console is not supported in Universal Windows Platform (UWP) apps. Los identificadores de flujo estándar que están asociados a la consola, stdin, stdout y stderr deben redirigirse antes de que las funciones en tiempo de ejecución de C puedan usarlos en aplicaciones para UWP.The standard stream handles that are associated with the console, stdin, stdout, and stderr, must be redirected before C run-time functions can use them in UWP apps. Para obtener información adicional sobre compatibilidad, consulte Compatibilidad.For additional compatibility information, see Compatibility.

EjemploExample

// crt_freopen.c
// compile with: /W3
// This program reassigns stderr to the file
// named FREOPEN.OUT and writes a line to that file.
#include <stdio.h>
#include <stdlib.h>

FILE *stream;

int main( void )
{
   // Reassign "stderr" to "freopen.out":
   stream = freopen( "freopen.out", "w", stderr ); // C4996
   // Note: freopen is deprecated; consider using freopen_s instead

   if( stream == NULL )
      fprintf( stdout, "error on freopen\n" );
   else
   {
      fprintf( stdout, "successfully reassigned\n" ); fflush( stdout );
      fprintf( stream, "This will go to the file 'freopen.out'\n" );
      fclose( stream );
   }
   system( "type freopen.out" );
}
successfully reassigned
This will go to the file 'freopen.out'

Consulte tambiénSee also

E/S de secuenciaStream I/O
fclose, _fcloseallfclose, _fcloseall
_fdopen, _wfdopen_fdopen, _wfdopen
_fileno_fileno
fopen, _wfopenfopen, _wfopen
_open, _wopen_open, _wopen
_setmode_setmode