MC102MN

Introdução a Algoritmos e programação de computadores

Arquivos

Em C existem dois jeitos complementares de se escrever e ler em arquivos, mas eles compartilham algumas coisas em comum. Todas as funções dessa aula estão no

#include <stdio.h>

A primeira e mais importante abstração para se lidar com arquivos em C é o ponteiro para um arquivo. Para abrir ou manipular um arquivo, é necessário primeiro declarar um ponteiro para esse arquivo, assim

FILE *arquivo;
depois, para abrir um arquivo, usa-se a função fopen,
FILE *arquivo = fopen("nome do arquivo", MODO);
MODO pode ser "r" se o arquivo é aberto para leitura, "w" se o arquivo é aberto para sobrescrita (ie, primeiro apaga tudo depois abre o arquivo), "a" se o arquivo é aberto para escrita no fim ou "r+" se o arquivo é aberto para leitura e escrita. Sugiro que vocês sempre usem "r", "w" ou "a". No windows, além disso, existe a distinção entre arquivos binários e de texto, e vocês devem abrir arquivos binários colocando um "b" no final do modo (ou seja: "r" vira "rb", etc).

Para fechar um arquivo (sempre é necessário fechar, senão as coisas não vão ser escritas nunca) se usa

fclose(arquivo);
se você quer garantir que coisas serão escritas mesmo antes de fechar o arquivo, use
fflush(arquivo);

Arquivos de texto

Para manipular um arquivo de texto em C as seguintes funções são recomendadas:

fprintf(arquivo, "Etc %d\n", i);
fscanf(arquivo, "%d %s %d", &i, nome, &j);
que funcionam da mesma forma que printf e scanf com a diferença que elas escrevem num arquivo em vez de escrever na tela. Inclusive, pela forma como essas funções são definidas, printf(…) é a mesma coisa que
fprintf(stdout, ....)
e scanf(…) é a mesma coisa que
fscanf(stdin, ....)

Ou seja: é como se automaticamente sempre existissem dois arquivos sempre abertos, stdin e stdout, e escrever na tela fosse a mesma coisa que escrever em stdout e ler do teclado fosse a mesma coisa que ler de stdin.

Não tem muito mais para ser dito sobre arquivos de texto, então vamos passar para arquivos binários.

Arquivos binários

Enquanto um arquivo de texto só pode guardar coisas formatadas como que para uma pessoa ler, um arquivo binário pode guardar qualquer tipo de dados. Normalmente, arquivos binários guardam structs. As funções básicas para manipular arquivos binários são fwrite e fread. Elas funcionam assim:

nbyteslidos = fread(buffer, tamanho_dado, ndados, arquivo);
nbytesescritos = fwrite(buffer, tamanho_dado, ndados, arquivo);

Elas funcionam da forma esperada.

Posição no arquivo

Mudar a posição que você está no arquivo só é útil se você está no modo "r+" ("r+b" no windows). Para isso, é necessário usar a função fseek. Ela funciona assim

fseek(arquivo, offset, SEEK_SET);
coloca vocÊ no byte número offset contando a partir do início do arquivo,
fseek(arquivo, offset, SEEK_CUR);
te coloca no byte número offset a partir da posição atual (então se offset for negativo ele volta) e
fseek(arquivo, offset, SEEK_END);
te coloca na posição offset a partir da posição final (ou seja: só vale para zero e negativos).

Para saber a posição atual, use

ftell(arquivo);

Author: Alexandre Tachard Passos <alexandre.tp@gmail.com>

Date: 2010-11-03 19:10:02 BRST

HTML generated by org-mode 6.21b in emacs 23