C I/O Intermediário
Arquivos
Em C, a manipulação de arquivos é feita através de um ponteiro para arquivo (FILE *), obtido com fopen. Essa função abre um arquivo em um modo específico (leitura, escrita, etc.) e retorna NULL em caso de erro, que deve ser sempre verificado. Após o uso, o arquivo deve ser fechado com fclose para liberar recursos e garantir que os dados sejam gravados.
Para entrada e saída formatada, usamos fprintf e fscanf, que funcionam como printf e scanf, mas operam em arquivos. Já para dados binários ou blocos de memória, usamos fread e fwrite, que leem e escrevem um número específico de bytes.
O tratamento de erros é essencial: sempre verifique se fopen retornou NULL e se as operações de leitura/escrita foram bem-sucedidas (comparando o valor de retorno com o esperado). Ignorar esses erros pode levar a falhas silenciosas ou corrupção de dados.
Pontos-chave
fopenabre um arquivo e retorna umFILE *; em caso de erro, retornaNULL.fclosefecha o arquivo e libera os recursos associados.fprintfefscanfrealizam E/S formatada (texto) em arquivos.freadefwriterealizam E/S binária, lendo/escrevendo blocos de bytes.- Sempre verifique o retorno de
fopene das funções de E/S para tratar erros.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
// Abre arquivo para escrita
FILE *fp = fopen("dados.txt", "w");
if (fp == NULL) {
perror("Erro ao abrir arquivo para escrita");
return 1;
}
// Escreve dados formatados
fprintf(fp, "%s %d\n", "idade", 30);
fprintf(fp, "%s %d\n", "peso", 75);
fclose(fp);
// Abre o mesmo arquivo para leitura
fp = fopen("dados.txt", "r");
if (fp == NULL) {
perror("Erro ao abrir arquivo para leitura");
return 1;
}
char nome[20];
int valor;
// Lê e imprime cada linha
while (fscanf(fp, "%19s %d", nome, &valor) == 2) {
printf("%s: %d\n", nome, valor);
}
fclose(fp);
return 0;
}