Ir para o conteúdo

CCT-UFCA/Ciência da Computação/Introdução à Programação/Manipulação de Arquivos

De Wikiversidade

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]
Modos de Abertura de Arquivos em C
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.