Operações de arquivo em C: fopen, fprintf, fscanf e fclose.
📖 O que você vai aprender nesta página
✅ Essenciais que você precisa saber
fopen(caminho, "r") / "w" / "a"
Sempre faça fclose
Verifique fp == NULL em caso de falha
⭐ Leia se tiver tempo
Modo binário "rb" "wb"
fprintf, fscanf, fgets
Posição no arquivo com fseek, ftell
O Fluxo de E/S de Arquivos
Quando um programa termina, os valores que ele calculou normalmente se perdem. Gravá-los em um arquivo torna os dados persistentes.
A E/S de arquivos segue três passos: (1) abrir (fopen) → (2) ler ou escrever (fprintf/fscanf) → (3) fechar (fclose).
📂
(1) fopen
Abrir o arquivo
→
✏️
(2) Ler/Escrever
fprintf / fscanf
→
🔒
(3) fclose
Fechar o arquivo
FILE *fp = fopen("data.txt", "w"); // "w" = escrita
if(fp == NULL){
printf("Não foi possível abrir o arquivo\n");
return 1;
}
fprintf(fp, "Hello File!\n"); // grava no arquivo
fclose(fp); // sempre feche
Sempre verifique o retorno de fopen contra NULL. Se o arquivo não puder ser aberto (caminho errado, sem permissão), fopen retorna NULL. Pule a verificação e seu programa vai quebrar.
Escrevendo em um Arquivo (fprintf)
fprintf é quase idêntico ao printf — ele apenas recebe um ponteiro FILE como primeiro argumento.
FILE *fp = fopen("scores.txt", "w");
int scores[3] = {85, 92, 78};
for(int i = 0; i < 3; i++){
fprintf(fp, "Student%d: %d\n", i+1, scores[i]);
}
fclose(fp);
Modo "w" (escrita)
Cria um novo arquivo ou sobrescreve um existente. Qualquer conteúdo anterior é apagado.
Modo "a" (append)
Anexa novo conteúdo no final de um arquivo existente.
Modo "r" (leitura)
Somente leitura. Retorna NULL se o arquivo não existir.
Lendo de um Arquivo (fscanf)
fscanf é a contraparte do scanf para arquivos. Verifique o valor de retorno para saber se a leitura teve sucesso.
O valor de retorno de fscanf é o número de itens lidos com sucesso. Retorna EOF no fim do arquivo, então while(fscanf(...) == 1) lê todos os dados.
Lendo Linha a Linha (fgets)
fgets lê uma linha inteira como string. Lida com linhas que têm espaços em branco com segurança, por isso muitas vezes é preferido ao fscanf na prática.
fgets é seguro: recebe o tamanho do buffer (via sizeof(buf)), o que evita estouros de buffer — uma escolha bem mais segura que scanf("%s").
📁 Sistema de Arquivos Virtual — Veja as operações de arquivo em ação
Observe o que fopen, fgets, fputs, fseek e fclose realmente fazem, passo a passo. Veja a posição do ponteiro de arquivo, o conteúdo do buffer e como cada modo ("r", "w", "a") se comporta.
🧪 Escolha um cenário
Escolha um cenário
// Nenhum cenário selecionado
📄 Conteúdo de data.txt
modo: -FILE* fp: NULLpos (ftell): -
buffer (buf): -
Log de operações
(Escolha um cenário e pressione ▶)
💡 Observe: O cursor amarelo (|) mostra a posição atual do ponteiro de arquivo. "w" esvazia o arquivo ao abrir, "a" sempre anexa no final e fseek pula para qualquer deslocamento.
Experimente Você Mesmo — E/S de Arquivos
Este exemplo simula a escrita e leitura de um arquivo, tudo no seu navegador.
fileio.c
Saída
Clique em Executar...
💡 Mais ideias para testar
Compare "w" (truncar) com "a" (anexar)
Use fprintf para saída formatada
Leia números com fscanf
Leia um arquivo com várias linhas, linha a linha com fgets