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
System::IO::FileStream::FileStream