Share via


freopen_s, _wfreopen_s

Reasigne un puntero de archivo.Éstas son versiones de freopen, _wfreopen con mejoras de seguridad como se describe en Características de seguridad en CRT.

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

Parámetros

  • [out] pFile
    Un puntero al puntero de archivo que se proporcionará la llamada.

  • [in] path
    Ruta de acceso del nuevo archivo.

  • [in] mode
    Tipo de acceso permitido.

  • [in] stream
    Puntero a la estructura de FILE.

Valor devuelto

Cada una de estas funciones devuelve un código de error.Si se produce un error, el archivo original se cierra.

Comentarios

La función de freopen_s cierra el archivo asociado actualmente a stream y reasigna stream al archivo especificado por path._wfreopen_s es una versión con caracteres anchos de _freopen_s; los argumentos de path y de mode a _wfreopen_s son cadenas de caracteres._wfreopen_s y _freopen_s se comportan exactamente igual de otra manera.

Si cualquiera de pFile, de path, de mode, o de stream es NULL, o si path es una cadena vacía, estas funciones se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros.Si la ejecución puede continuar, este errno establecido funciones a EINVAL y a EINVAL return.

Asignaciones de la rutina de Genérico- texto

Rutina de TCHAR.H

_UNICODE y _MBCS no definidos

_MBCS definido

_UNICODE definido

_tfreopen_s

freopen_s

freopen_s

_wfreopen_s

freopen_s se utiliza normalmente para redirigir los archivos pre- abiertos stdin, stdout, y stderr a los archivos especificados por el usuario.El nuevo archivo asociado a stream se abre con mode*,* una cadena de caracteres que especifica el tipo de acceso solicitado para el archivo, como sigue:

  • "r"
    Abrir para leer.Si el archivo no existe o no se encuentra, la llamada de freopen_s falla.

  • "w"
    Abra un archivo vacío para escribir.Si existe el archivo dado, se destruyen su contenido.

  • "a"
    Abrir para escribir al final del archivo (el anexar) sin quitar el marcador EOF antes de escribir nuevos datos al archivo; crea el archivo primero si no existe.

  • "r+"
    Abrir para la lectura y escritura.(El archivo no debe existir.)

  • "w+"
    Abra un archivo vacío para la lectura y escritura.Si existe el archivo dado, se destruyen su contenido.

  • "a+"
    Abrir para leer y anexar; la operación que anexa incluye la eliminación del marcador EOF antes de que los nuevos datos se escribe en el archivo y se restablece el marcador EOF después de que se complete la escritura; crea el archivo primero si no existe.

Utilice los tipos de "w" y de "w+" con cuidado, como pueden destruir archivos existentes.

Si se abre con el tipo de acceso de "a" o de "a+", todas las operaciones de escritura tienen lugar al final del archivo.Aunque el puntero de archivo se puede cambiar de posición mediante fseek o rewind, el puntero de archivo se mueve siempre al final del archivo antes de que se realice cualquier operación de escritura.Así, los datos existentes no pueden sobrescribirse.

El modo de "a" no quita el marcador EOF antes de anexar al archivo.Después de anexar ha producido, el comando VARIANT de MS-DOS solo muestra datos hasta el marcador original EOF y hay datos anexados al archivo.El modo de "a+" quita el marcador EOF antes de anexar al archivo.Después de anexar, el comando VARIANT de MS-DOS muestra todos los datos del archivo.Requieren el modo de "a+" para anexar a un archivo de la secuencia que se terminan con el marcador de CTRL+Z EOF.

Cuando se especifica "r+","w+", o el tipo de acceso de "a+", se permiten la lectura y escritura (el archivo se abre para “update”).Sin embargo, cuando cambie de lectura y escritura, debe haber fsetpos intermedia, fseek, u operación de rebobinado.La posición actual se puede especificar para la operación de fsetpos o de fseek, si lo desea.Además de los valores anteriores, uno de los siguientes caracteres se puede incluir en la cadena de mode para especificar el de modalidad de traducción para las nuevas líneas.

  • t
    Abra en modo de texto (traducido); combinaciones de retorno- avance de línea de carro (CR-LF) se convierten en los únicos caracteres de (LF) avance de línea en entrada; Los caracteres de LF se traducen a las combinaciones de CR-LF en la salida.También, CTRL+Z se interpretan como un final de archivo de entrada.En archivos abierto para leer o escribir y leer con "a+", la biblioteca en tiempo de ejecución un CTRL+Z al final del archivo y colóquelo, si es posible.Se hace esto porque utilizar fseek y ftell para desplazarse en un archivo puede hacer fseek para comportarse incorrectamente cerca del final del archivo.La opción de t es una extensión de Microsoft que no debe utilizarse donde desee la portabilidad de ANSI.

  • b
    Abra en modo (sin traducir) binario; se suprimen las conversiones anteriores.

Si t o b no se proporcione en mode, el de modalidad de traducción predeterminado está definida por la variable global _fmode.Si t o b precedido el argumento, se produce un error en la función y devuelve NULL.

Para obtener una explicación de los modos de texto y el binario, vea E/S de archivo de texto y el modo binario.

Requisitos

Función

Encabezado necesario

freopen_s

<stdio.h>

_wfreopen_s

<stdio.h> o <wchar.h>

La consola no se admite en las aplicaciones de Tienda Windows.Los identificadores estándar de la secuencia asociados a la consola, stdin, stdout, y stderr, deben redirigir antes de que las funciones en tiempo de ejecución de C pueden utilizarlos en las aplicaciones de Tienda Windows.Para obtener información adicional de compatibilidad, vea Compatibilidad en la Introducción.

Ejemplo

// crt_freopen_s.c
// 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 )
{
   errno_t err;
   // Reassign "stderr" to "freopen.out": 
   err = freopen_s( &stream, "freopen.out", "w", stderr );

   if( err != 0 )
      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" );
}
  

Equivalente en .NET Framework

Vea también

Referencia

E/S de la secuencia

freopen, _wfreopen

fclose, _fcloseall

_fdopen, _wfdopen

_fileno

fopen, _wfopen

_open, _wopen

_setmode