CCT-UFCA/Ciência da Computação/Introdução à Programação/Manipulação de Arquivos
Manipulação de Arquivos
[editar | editar código]A manipulação de arquivos é uma etapa essencial em muitos programas, pois permite que os dados sejam armazenados de forma permanente, mesmo após o encerramento do programa. Em C, os arquivos são tratados por meio da biblioteca padrão <stdio.h>.
Abrindo Arquivos
[editar | editar código]Para trabalhar com arquivos, utilizamos a função fopen(), que abre um arquivo e retorna um ponteiro para ele.
FILE *arquivo;
arquivo = fopen("dados.txt", "r");
O primeiro parâmetro é o nome do arquivo e o segundo é o modo de abertura. Se o arquivo não for encontrado (no modo de leitura, por exemplo), fopen() retorna NULL.
Modos de Abertura
[editar | editar código]| Modo | Descrição |
|---|---|
| r | Leitura (arquivo deve existir) |
| w | Escrita (cria ou sobrescreve) |
| a | Acrescenta no final (cria se não existir) |
| r+ | Leitura e escrita (arquivo deve existir) |
| w+ | Leitura e escrita (sobrescreve/cria) |
| a+ | Leitura e escrita (acrescenta/cria) |
Fechando Arquivos
[editar | editar código]Sempre que terminar de trabalhar com um arquivo, é necessário fechá-lo usando fclose():
fclose(arquivo);
Leitura de Arquivos
[editar | editar código]Existem várias funções para ler arquivos:
- fgetc() — Lê um caractere.
- fgets() — Lê uma string (linha ou até determinado tamanho).
- fscanf() — Lê dados formatados, como scanf().
Exemplo lendo um arquivo linha por linha:
char linha[100];
FILE *arquivo = fopen("dados.txt", "r");
if (arquivo != NULL) {
while (fgets(linha, 100, arquivo) != NULL) {
printf("%s", linha);
}
fclose(arquivo);
} else {
printf("Erro ao abrir o arquivo.\n");
}
Escrita em Arquivos
[editar | editar código]Funções comuns para escrever:
- fputc() — Escreve um caractere.
- fputs() — Escreve uma string.
- fprintf() — Escreve dados formatados, como printf().
Exemplo escrevendo em um arquivo:
FILE *arquivo = fopen("saida.txt", "w");
if (arquivo != NULL) {
fprintf(arquivo, "Nome: %s\n", "Maria");
fprintf(arquivo, "Idade: %d\n", 25);
fclose(arquivo);
} else {
printf("Erro ao abrir o arquivo.\n");
}
Arquivos Binários
[editar | editar código]Mais eficiente, usado quando lidamos com estruturas.
- Arquivos Texto: São legíveis por humanos. Salvam dados como sequências de caracteres (ASCII/UTF-8). Fáceis de abrir com qualquer editor de texto. Ideal quando os dados precisam ser lidos ou editados manualmente.
- Arquivos Binários: Salvam os dados no formato de memória do computador (sequência de bytes). Mais eficientes, menores e rápidos para leitura/escrita. Necessários quando trabalhamos com estruturas, imagens, áudio, etc.
Qual escolher?
[editar | editar código]- Use texto quando a legibilidade for importante (como logs, configurações ou dados simples).
- Use binário quando quiser eficiência, tamanho reduzido, ou quando for trabalhar com dados complexos (structs, matrizes, etc.).
A linguagem C permite manipular arquivos binários com as funções:
- fread() — Lê blocos de dados.
- fwrite() — Escreve blocos de dados.
Exemplos:
[editar | editar código]Escrita:
#include <stdio.h>
#include <string.h>
typedef struct {
char nome[50];
int idade;
float altura;
} Pessoa;
int main() {
Pessoa pessoas[2] = {
{"Ana", 30, 1.65},
{"Bruno", 25, 1.80}
};
FILE *arquivo = fopen("dados.bin", "wb");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo para escrita.\n");
return 1;
}
fwrite(pessoas, sizeof(Pessoa), 2, arquivo);
fclose(arquivo);
printf("Dados salvos com sucesso.\n");
return 0;
}
Leitura:
#include <stdio.h>
typedef struct {
char nome[50];
int idade;
float altura;
} Pessoa;
int main() {
Pessoa pessoas[2];
FILE *arquivo = fopen("dados.bin", "rb");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo para leitura.\n");
return 1;
}
fread(pessoas, sizeof(Pessoa), 2, arquivo);
fclose(arquivo);
for (int i = 0; i < 2; i++) {
printf("Nome: %s\n", pessoas[i].nome);
printf("Idade: %d\n", pessoas[i].idade);
printf("Altura: %.2f\n\n", pessoas[i].altura);
}
return 0;
}
Verificando Fim de Arquivo e Erros
[editar | editar código]- feof(arquivo) — Retorna verdadeiro se chegou ao final do arquivo.
- ferror(arquivo) — Verifica erros durante operações.
Boas Práticas
[editar | editar código]- Sempre verifique se fopen() retornou NULL.
- Sempre use fclose() para liberar recursos.
- Verifique erros com ferror() quando necessário.
- Prefira arquivos binários quando o desempenho ou a integridade dos dados for uma preocupação.
Conclusão
[editar | editar código]A manipulação de arquivos permite que os programas interajam com dados permanentes. Aprender a abrir, ler, escrever e fechar arquivos é essencial para qualquer programador na linguagem C. Pratique bastante com exemplos de leitura e escrita, tanto em arquivos texto como binários, para fixar bem o conteúdo.