Compartilhar via


freopen_s, _wfreopen_s

Reatribua um ponteiro de arquivo.Essas são sistema autônomo versões de freopen, _wfreopen com aprimoramentos de segurança conforme descrito em Aprimoramentos de segurança no 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
    Um ponteiro para o ponteiro do arquivo a ser fornecido pela telefonar.

  • [in]path
    Caminho do novo arquivo.

  • [in]mode
    Tipo de acesso permitido.

  • [in]stream
    Ponteiro para FILE estrutura.

Valor de retorno

Cada uma dessas funções retorna um código de erro.Se ocorrer um erro, o arquivo original será fechado.

Comentários

The freopen_s function closes the file currently associated with stream and reassigns stream to the file specified by path. _wfreopen_s is a wide-character version of _freopen_s; the path and mode arguments to _wfreopen_s are wide-character strings._wfreopen_s e _freopen_s tenham comportamento idêntico caso contrário.

Se qualquer um dos pFile, path, mode, ou stream são NULL, ou se path é uma seqüência vazia, essas funções chamar o manipulador de parâmetro inválido sistema autônomo descrito em Validação de parâmetro. Se a execução for permitida para continuar, essas funções conjunto errno para EINVAL e retornar EINVAL.

Mapeamentos de rotina de texto genérica

Rotina TCHAR.H

_UNICODE & _MBCS não definido

_MBCS definido

_UNICODE definido

_tfreopen_s

freopen_s

freopen_s

_wfreopen_s

freopen_s normalmente é usado para redirecionar os arquivos pre-opened stdin, stdout, e stderr arquivos especificados pelo usuário. O novo arquivo sistema autônomo sociated com stream é aberto com mode*,* que é um caractere de seqüência de caracteres que especifica o tipo de acesso solicitado para o arquivo sistema autônomo segue:

  • "r"
    Será aberto para leitura.Se o arquivo não existe ou não for encontrado, o freopen_s Chame falhar.

  • "w"
    Abre um arquivo vazio para gravação.Se existir o arquivo fornecido, seu Sumário será destruído.

  • "a"
    É aberto para gravação no participante do arquivo (acrescentar) sem remover o marcador EOF antes de gravar novos dados para o arquivo; cria o arquivo primeiro se não existir.

  • "r+"
    Será aberto para leitura e gravação.(O arquivo deve existir).

  • "w+"
    Abre um arquivo vazio para ler e gravar.Se existir o arquivo fornecido, seu Sumário será destruído.

  • "a+"
    Será aberto para leitura e acrescentando; acrescentando operação inclui a remoção do marcador EOF antes que novos dados são gravados no arquivo e o marcador EOF é restaurado após a gravação seja concluído; cria o arquivo primeiro se não existir.

Use o "w" e "w+" tipos com cuidado, pois elas podem destruir sistema autônomo arquivos existentes.

Quando um arquivo for aberto com o "a" ou "a+" acesso de tipo, todas as operações ocorrem no participante do arquivo de gravar. Embora o ponteiro do arquivo pode ser reposicionado fseek ou rewind, o ponteiro do arquivo é sempre movido de volta para o participante do arquivo antes de escrever nenhuma operação é executada. Assim, os dados existentes não podem ser substituídos.

The "a" não remove o marcador EOF antes acrescentando o arquivo. Após a ocorrência de acréscimo, o comando MS-DOS TYPE mostra somente dados até o marcador EOF original e não os dados anexados ao arquivo.The "a+" modo irá remover o marcador EOF antes de acrescentá-lo. Após importar, o comando MS-DOS TYPE, mostra todos os dados no arquivo.The "a+" o modo é necessário para acrescentar a um arquivo de fluxo que é encerrado com o marcador EOF CTRL+Z.

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").No entanto, quando você alterna entre a leitura e gravação, deve haver um intermediárias fsetpos, fseek, or retroceder operação.A posição corrente pode ser especificada para o fsetpos ou fseek operação, se desejado. Juntamente com os valores acima, um dos seguintes caracteres pode ser incluído na mode seqüência de caracteres para especificar o modo de tradução para novas linhas.

  • t
    em em aberto no modo de texto (convertido); de carro (CR-LF) return–linefeed combinações são convertidas em caracteres de avanço de única linha (LF) na entrada; caracteres LF são convertidos em combinações de CR-LF na saída.Além disso, CTRL+Z é interpretado sistema autônomo um caractere de participante de arquivo na entrada.Em arquivos abertos para leitura ou para gravação e leitura de "a+", a biblioteca de time de execução verifica um CTRL+Z no participante do arquivo e remove-lo, se possível. Isso é concluído porque usando fseek e ftell Para mover-se dentro de um arquivo poderá causar fseek se comporte incorretamente no participante do arquivo. The t opção é uma extensão da Microsoft que não deve ser usada onde ANSI portabilidade for desejada.

  • b
    em em aberto no modo binário (não traduzido); as traduções acima são suprimidas.

If t ou b não é fornecido na mode, o modo de tradução padrão é definido pela variável global _fmode.If t ou b tem o prefixo para o argumento, a função falha e retorna NULL.

Para obter uma abordagem de texto e modos de binários, consulte Texto e o modo binário E/s de arquivos.

Requisitos

Função

Cabeçalho necessário

freopen_s

<stdio.h>

_wfreopen_s

<stdio.h> ou <wchar.h>

Para obter informações adicionais compatibilidade, consulte Compatibilidade na introdução.

Exemplo

// 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" );
}

successfully reassigned This will go to the file 'freopen.out'

Equivalente do NET Framework

Consulte também

Referência

Fluxo de E/S

freopen, _wfreopen

fclose, _fcloseall

_fdopen, _wfdopen

_fileno

fopen, _wfopen

_Open, _wopen

_setmode