Publicidade

E/S de Arquivos

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.
FILE *fp = fopen("numbers.txt", "r");
if(fp == NULL) return 1;

int val;
while(fscanf(fp, "%d", &val) == 1){
  printf("Lido: %d\n", val);
}
fclose(fp);
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.
FILE *fp = fopen("memo.txt", "r");
if(fp == NULL) return 1;

char buf[256];
int lineNo = 1;
while(fgets(buf, sizeof(buf), fp) != NULL){
  printf("%d: %s", lineNo, buf);
  lineNo++;
}
fclose(fp);
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: NULL pos (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
Publicidade

Aulas relacionadas

Básico
printf & scanf
Como printf e scanf funcionam, mais uma referência de especificadores de formato.
Avançado
Structs
Definindo e usando structs em C, acesso a membros e arrays de structs.
Avançado
malloc / free
Alocação dinâmica de memória e como evitar vazamentos.
← Aula anterior
Aula 28: Estruturas (struct)
Próxima aula →
Aula 30: Memória Dinâmica (malloc/free)

Teste Rápido

Confira seu entendimento desta aula.

Q1. O que significa o argumento "r" em fopen?

Somente leitura
Somente escrita
Modo append

"r" é o modo de leitura. "w" é escrita e "a" é append.

Q2. O que você sempre deve fazer ao final das operações de arquivo?

free()
fclose()
return 0;

Um arquivo aberto deve ser fechado com fclose(). Caso contrário, dados no buffer podem nunca ser gravados no disco.

Q3. O que fopen retorna quando falha?

0
-1
NULL

fopen retorna NULL quando não consegue abrir o arquivo. Sempre verifique o valor de retorno e trate o erro.

Compartilhe este artigo
Compartilhar no X Compartilhar no Facebook