Compartilhar via


freopen_s, _wfreopen_s

Atribua o ponteiro de um arquivo.Essas são versões de freopen, _wfreopen com aprimoramentos de segurança conforme descrito em Recursos 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 chamada.

  • [in] path
    Caminho do novo arquivo.

  • [in] mode
    Tipo de acesso permitido.

  • [in] stream
    Ponteiro para a estrutura de FILE .

Valor de retorno

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

Comentários

A função de freopen_s fecha o arquivo atualmente associado com stream e reatribuir o stream o arquivo especificado por path._wfreopen_s é uma versão de largo- caractere de _freopen_s; os argumentos de path e de mode a _wfreopen_s são cadeias de caracteres de largo- caractere._wfreopen_s e _freopen_s se comportam de forma idêntica.

Se qualquer um de pFile, de path, de mode, ou de stream é NULL, ou se path é uma cadeia de caracteres vazia, essas funções chamam o manipulador de parâmetro inválido, como descrito em Validação de parâmetro.Se a execução é permitida continuar, este errno definir funções a EINVAL e a EINVALde retorno.

Mapeamentos da rotina de Genérico- texto

Rotina de TCHAR.H

_UNICODE & _MBCS não definidos

_MBCS definido

_UNICODE definido

_tfreopen_s

freopen_s

freopen_s

_wfreopen_s

freopen_s é normalmente usado para redirecionar os passos arquivos abertos stdin, stdout, e stderr para os arquivos especificados pelo usuário.O novo arquivo associado com stream é aberto com mode*,* que é uma cadeia de caracteres que especifica o tipo de acesso aplicativo para o arquivo, da seguinte maneira:

  • "r"
    Abre ler.Se o arquivo não existe ou não pode ser encontrado, a chamada de freopen_s falhar.

  • "w"
    Abre um arquivo vazio para gravação.Se o arquivo existe, seu conteúdo são destruídos.

  • "a"
    Escrevendo abre no final do arquivo () sem anexar remova o marcador de EOF antes de gravar novos dados para o arquivo; cria primeiro se o arquivo não existe.

  • "r+"
    Abre para a leitura e gravação.(O arquivo deve existir.)

  • "w+"
    Abre um arquivo vazio para a leitura e gravação.Se o arquivo existe, seu conteúdo são destruídos.

  • "a+"
    Abrir e ler acrescentando; a operação acrescentando inclui a remoção de marcador de EOF antes que os novos dados serem gravados no arquivo e o marcador de EOF é restaurado depois que escrever está completa; cria primeiro se o arquivo não existe.

Use os tipos de "w" e de "w+" com cuidado, como também podem arquivos existentes.

Quando um arquivo é aberto com o tipo de acesso de "a" ou de "a+" , todas as operações de gravação ocorrem no final do arquivo.Embora o ponteiro do arquivo pode ser reposicionado usando fseek ou rewind, o ponteiro do arquivo é movido sempre de volta ao final do arquivo antes que qualquer operação de gravação é executada.Assim, os dados existentes não podem ser substituídos.

O modo de "a" não remove o marcador de EOF antes de acrescentar o arquivo.Após acrescentar ocorreu, o comando de TIPO de MS-DOS mostra somente dados até o marcador de EOF de original e não nenhum dado anexado ao arquivo.O modo de "a+" remove o marcador de EOF antes de acrescentar o arquivo.Após acrescentar, o comando de TIPO de MS-DOS mostra todos os dados no arquivo.O modo de "a+" é necessário acrescentar a um arquivo de fluxo que é encerrado com o marcador de CTRL+Z EOF.

Quando "r+","w+", ou o tipo de acesso de "a+" são especificados, a leitura e gravação são permitidas (o arquivo é aberto para “atualizar”).No entanto, quando você alternar entre a leitura e gravação, deve haver fsetposinterveniente, fseek, ou uma operação de rebobinação .A posição atual pode ser especificado para a operação de fsetpos ou de fseek , se desejado.Além dos valores anterior, um dos seguintes caracteres pode ser incluído na cadeia de caracteres de mode para especificar o modo de tradução para novas linhas.

  • t
    Abra no modo de texto (traduzido); as combinações de retorno- alimentação de linha de CR-LF carro () são traduzidas em únicos caracteres de (LF) de alimentação de linha na entrada; Os caracteres de LF são traduzidas as combinações de CR-LF na saída.Além disso, CTRL+Z é interpretado como um caractere de final de Arquivo na entrada.Em arquivos abertos ler ou gravar e ler com "a+", a biblioteca em tempo de execução verifica um CTRL+Z no final do arquivo e remova-o, se possível.Isso é feito como usar fseek e ftell para mover um arquivo pode fazer com que fseek se comporta de modo inadequado do final do arquivo.A opção de t é uma extensão do Microsoft que não deve ser usado onde a portabilidade ANSI é desejada.

  • b
    Abra no modo (a binário;) as traduções acima são suprimidas.

Se t ou b não são dados em mode, o modo padrão de translação é definido pela variável global _fmode.Se t ou b são prefixados para o argumento, a função falha e retorna NULL.

Para uma discussão sobre modos de texto e de binário, consulte O modo de texto e binário E/S de arquivos.

Requisitos

Função

Cabeçalho necessário

freopen_s

<stdio.h>

_wfreopen_s

<stdio.h> ou <wchar.h>

O console não é suportado em aplicativos de Windows Store .Identificadores padrões de fluxo associadas ao console, stdin, stdout, e stderr, devem ser redirecionada antes que as funções de tempo de execução das C pode usar em aplicativos de Windows Store .Para informações extras de compatibilidade Compatibilidade na introdução, consulte.

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

Equivalência do .NET Framework

Consulte também

Referência

Fluxo de i/O

freopen, _wfreopen

fclose, _fcloseall

_fdopen, _wfdopen

_fileno

fopen, _wfopen

Open, _wopen

_setmode