Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Reatribui um ponteiro de arquivo. Versões mais seguras das funções estão disponíveis; veja freopen_s, _wfreopen_s.
Sintaxe
FILE *freopen(
const char *path,
const char *mode,
FILE *stream
);
FILE *_wfreopen(
const wchar_t *path,
const wchar_t *mode,
FILE *stream
);
Parâmetros
path
Caminho do novo arquivo.
mode
Tipo de acesso permitido.
stream
Ponteiro para a estrutura FILE.
Valor retornado
Cada uma dessas funções retorna um ponteiro para o arquivo recém-aberto. Se ocorrer um erro, o arquivo original será fechado e a função retornará um NULL valor de ponteiro. Se path, mode, ou stream for um ponteiro nulo ou se filename for uma cadeia de caracteres vazia, essas funções invocarão o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, essas funções definirão errno como EINVAL e retornarão NULL.
Para obter mais informações sobre códigos de erro, consulte errno, _doserrno, _sys_errliste _sys_nerr.
Comentários
Existem versões mais seguras dessas funções, consulte freopen_s, _wfreopen_s.
A freopen função fecha o arquivo atualmente associado stream e reatribui stream ao arquivo especificado por path. _wfreopen é uma versão de caractere largo de _freopen; os argumentos path e mode para _wfreopen são cadeias de caracteres largos. Caso contrário, _wfreopen e _freopen se comportam de forma idêntica.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Mapeamentos de rotina de texto genérico
Rotina TCHAR.H |
_UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
|---|---|---|---|
_tfreopen |
freopen |
freopen |
_wfreopen |
freopen normalmente é usado para redirecionar os arquivos abertos previamente stdin, stdout e stderr para arquivos especificados pelo usuário. O novo arquivo associado é stream aberto com mode, que é uma cadeia de caracteres que especifica o tipo de acesso solicitado para o arquivo, da seguinte maneira:
mode |
Access |
|---|---|
"r" |
Abre para leitura. Se o arquivo não existir ou não puder ser encontrado, a chamada freopen falhará. |
"w" |
Abre um arquivo vazio para gravação. Se o arquivo determinado existir, seus conteúdos são destruídos. |
"a" |
Abre para gravação no fim do arquivo (conexão) sem remover o marcador de EOF (Fim de arquivo) antes de novos dados serem gravados no arquivo. Cria o arquivo se ele não existir. |
"r+" |
Abre para leitura e gravação. O arquivo deve existir. |
"w+" |
Abre um arquivo vazio para leitura e gravação. Se o arquivo existir, seus conteúdos são destruídos. |
"a+" |
Abre para leitura e conexão. A operação de conexão inclui a remoção do marcador de EOF antes de os novos dados serem gravados no arquivo. O marcador de EOF não é restaurado após a gravação ser concluída. Cria o arquivo se ele não existir. |
Use os tipos "w" e "w+" com cuidado, pois eles podem destruir arquivos existentes. Começando com C11, você pode acrescentar "x" a "w" ou "w+" para causar falha na função se o arquivo existir, em vez de substituí-lo.
Quando um arquivo é aberto com o tipo de acesso "a" ou "a+", todas as operações de gravação ocorrem no fim do arquivo. Embora o ponteiro do arquivo possa ser reposicionado usando fseek ou rewind, o ponteiro do arquivo é sempre movido de volta para o final do arquivo antes que qualquer operação de gravação seja executada. Portanto, os dados existentes não podem ser substituídos.
O modo "a" não remove o marcador de EOF antes de ser acrescentado ao arquivo. Depois de a conexão ter ocorrido, o comando MS-DOS TYPE só mostra dados até o marcador de EOF original, e não qualquer dado anexado ao arquivo. O modo "a+" remove o marcador de EOF antes de ser acrescentado ao arquivo. Depois de anexar, o comando MS-DOS TYPE mostra todos os dados no arquivo. O modo "a+" é exigido para conexão com um arquivo de fluxo terminado com o marcador de EOF CTRL+Z.
Quando o tipo de acesso "r+", "w+" ou "a+" é especificado, são permitidas leitura e gravação (diz-se que o arquivo está aberto para "atualização"). No entanto, quando você muda entre leitura e gravação, precisa haver uma operação fsetpos, fseek ou rewind intermediária. A posição atual pode ser especificada para a operação fsetpos ou fseek, se quiser. Além dos valores acima, um dos caracteres seguintes pode ser incluído na cadeia de caracteres mode para especificar o modo de conversão para novas linhas.
Modificador mode |
Modo de conversão |
|---|---|
t |
Abra no modo de texto (convertido). |
b |
Abra em um modo binário (não convertido); as conversões envolvendo caracteres de retorno de carro e avanço de linha são suprimidas. |
No modo de texto (convertido), combinações de CR-LF (retorno de carro – avanço de linha) são convertidas em caracteres de LF (avanço de linha) simples na entrada; caracteres de LF são convertidos em combinações de CR-LF na saída. Além disso, CTRL+Z é interpretado como um caractere de fim do arquivo na entrada. Em arquivos abertos para leitura ou para leitura e gravação com "a+", a biblioteca em tempo de execução verifica se há um CTRL+Z no fim do arquivo e o remove, se possível. Ele é removido porque usar fseek e mover dentro de um arquivo pode fazer com que fseek você se comporte ftell de maneira inadequada perto do final do arquivo. Não use a opção t se quiser portabilidade ANSI porque é uma extensão da Microsoft.
Se t ou b não for fornecido em mode, o modo de conversão padrão será definido pela variável global _fmode. Se t ou b for prefixado para o argumento, a função falha e retorna NULL.
Para saber mais sobre os modos de texto e binário, consulte E/S de texto e arquivo de modo binário.
Requisitos
| Função | Cabeçalho necessário |
|---|---|
freopen |
<stdio.h> |
_wfreopen |
<stdio.h> ou <wchar.h> |
Não há suporte para o console em aplicativos UWP (Plataforma Universal do Windows). Os identificadores de fluxo padrão associados ao console, stdin, stdout e stderr, devem ser redirecionados antes que as funções em tempo de execução C possam usá-los em aplicativos UWP. Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
// crt_freopen.c
// compile with: /W3
// 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 )
{
// Reassign "stderr" to "freopen.out":
stream = freopen( "freopen.out", "w", stderr ); // C4996
// Note: freopen is deprecated; consider using freopen_s instead
if( stream == NULL )
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'
Confira também
E/S de fluxo
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode