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'