Escolar Documentos
Profissional Documentos
Cultura Documentos
MC102 – Felipe Bergo
Arquivos
O sistema de arquivos é uma abstração para as memórias
secundárias do computador: discos, fitas, CDs.
Há uma hierarquia de diretórios e cada diretório pode conter
arquivos.
Um arquivo é uma seqüência ordenada de bytes.
Acesso a Arquivos em C
Abertura e Fechamento de Arquivos
Antes de acessar os dados dentro de um arquivo é necessário abrilo.
Ao terminar de realizar as operações no arquivo, devemos fechálo.
As operações de abertura e fechamento garantem a integridade dos dados.
As funções referentes a arquivos requerem a inclusão do stdio.h, e todo
arquivo aberto é referenciado por um ponteiro para o tipo FILE.
Acesso a Arquivos em C
Abertura e Fechamento de Arquivos
FILE * fopen(char *nome, char *modo);
Abre o arquivo nome com o modo dado. O nome deve ser uma
string, que pode incluir um caminho completo. O separador de
diretórios depende do sistema. No Windows, "C:\\temp\\arquivo" é um
nome válido. No Linux, "/bin/ls" é um nome válido.
O modo é uma string que indica se o arquivo será aberto para leitura,
escrita, ambos, ou variações.
Modo "r" – apenas leitura
Modo "w" – apenas escrita, truncando o arquivo
Modo "a" – apenas escrita, mantem os dados originais e posiciona
cursor ao final do arquivo.
Modo "r+" – leitura e escrita, mantendo os dados originais.
Modo "w+" – leitura e escrita, truncando o arquivo.
Acesso a Arquivos em C
Abertura e Fechamento de Arquivos
FILE * fopen(char *nome, char *modo);
Se a abertura falhar, fopen retora NULL.
int fclose(FILE *f);
Fecha um arquivo aberto. Retorna 0 em caso de sucesso, outro valor em caso
de erro (como tentar fechar um arquivo que não está aberto).
Acesso a Arquivos em C
Leitura de Dados
C provê funções para ler caracteres, linhas de texto, padrões formatados ou
vetores de bytes:
int fgetc(FILE *f)
lê um byte, retorna seu valor (0255) como inteiro. Retorna EOF em caso de
erro.
char *fgets(char *dest, int limite, FILE *f);
lê uma linha de texto (ou até atingir o limite de bytes lidos) e guarda o texto
lido em dest. Retorna dest em caso de sucesso, NULL em caso de erro.
int fscanf(FILE *f, char *formato, ...);
scanf para arquivos.
int fread(void *dados, int tam_elem, int num_elem, FILE *f);
lê num_elem elementos de tam_elem bytes cada e armazena em dados.
Retorna o número de elementos lidos com sucesso.
Acesso a Arquivos em C
Escrita de Dados
C provê funções para escrever caracteres, strings, padrões formatados ou
vetores de bytes:
int fputc(int c, FILE *f)
Escreve o byte c. Retorna EOF em caso de erro.
int fputs(char *dest, FILE *f);
Escreve a string dest (que deve ter o zero terminador) no arquivo. Retorna EOF em caso
de erro.
int fprintf(FILE *f, char *formato, ...);
printf para arquivos.
int fwrite(void *dados, int tam_elem, int num_elem, FILE *f);
Escreve num_elem elementos de tam_elem bytes cada, armazenados em dados.
Retorna o número de elementos escritos com sucesso.
Acesso a Arquivos em C
Posicionamento do Cursor
Em todo arquivo aberto há um "cursor" indicando a posição onde ocorrerá
a próxima leitura e/ou escrita. Todas as operações de leitura e escrita
avançam o cursor após ler/escrever os dados. Para mover o cursor, ou
obter sua posição atual, temos:
int fseek(FILE *f, long distancia, int origem);
Move o cursor do arquivo f para a posição distancia relativa a alguma origem. A origem
deve ser uma destas 3 constantes:
SEEK_SET – início do arquivo
SEEK_CUR – posição atual
SEEK_END – fim do arquivo
fseek retorna 0 em caso de sucesso, 1 em caso de erro.
long ftell(FILE *f);
Retorna a posição atual do cursor no arquivo f.
Acesso a Arquivos em C
Exemplo
#include <stdio.h>