Você está na página 1de 22

Arquivos - parte 1

lilian.scatalon@cefetmg.br
Arquivos
Arquivo é um conjunto de dados armazenado em um dispositivo externo (discos,
pendrives, etc)

Capacidade de armazenar e manipular grandes quantidades de dados e


recuperá-los em qualquer momento do futuro

A linguagem C trata os dispositivos de entrada e saída como se fossem arquivos


Arquivos
Programas criam, abrem, alteram e salvam arquivos para serem usados em outro
momento.
leitura

Programa Arquivos

escrita
Streams
Nível lógico (programas)
Abstração do dispositivo utilizado

Fornecem uma interface para manipular arquivos de Stream


modo independente do dispositivo que os armazena

Há dois tipos de stream:

● Stream de texto: sequência de caracteres


Nível físico (impressora,
● Stream binária: sequência de bytes teclado, disco, etc)

Buffer: bloco de memória usada para facilitar a


transferência de dados em operações de entrada/saída
Acesso aleatório/randômico
Tempo de acesso aos elementos é constante (em qualquer posição)

...

0 i 100000
Acesso sequencial
Tempo de acesso depende da posição do elemento

Para acessar a posição i é necessário passar pela posição i-1


Streams de texto
No modo texto os dados são manipulados como uma sequência de caracteres
ASCII.

A troca de arquivos entre diferentes programas é facilitada quando o arquivo é do


tipo texto

Exemplos: txt, c, html, tex


Streams binárias
Arquivos binários são compostos por uma sequência de bytes

Para manipular o arquivo binário, é preciso conhecer previamente como os dados


estão organizados

Mais rápidos, porém muito dependentes de máquina

Usam menos espaço em disco do que arquivos do tipo texto


Exemplo comparativo
Representar um número do tipo double no formato binário requer 8 bytes.

Representar o mesmo número no formato texto requer 23 bytes, um byte por


caractere.

±d.ddddddddddddddddE±dd
Ponteiro de arquivo
Aponta para uma dada posição do arquivo ou está indefinida.

Em uma operação de leitura, o dado lido é aquele indicado pelo ponteiro. Após a
leitura, a variável passa a apontar para o próximo elemento.

...

ponteiro de arquivo
Streams padrão
Sempre que um programa em C é executado, três streams são abertas
automaticamente:

● stdin: entrada padrão


● stdout: saída padrão
● stderr: saída de erro padrão
Abrindo um arquivo
FILE *fopen(const char *nome_arq, const char *permissao)

nome_arq: ponteiro para uma string contendo o nome do arquivo

permissao: ponteiro para uma string que indica o modo de abertura do arquivo
Arquivos texto: modos de abertura (permissão)
r rt Somente leitura em um arquivo existente

w wt Somente escrita em um arquivo novo

a at Anexação de dados ao final de um arquivo existente

r+ rt+ Leitura e escrita em um arquivo existente

w+ wt+ Leitura e escrita em um arquivo novo

a+ at+ Leitura e escrita ao final de um arquivo existente

...

Por default, um arquivo é aberto em modo texto (t)


Exemplo de uso de fopen()
FILE *fp;

fp = fopen(“dados.txt”,”wt”);

if( fp != NULL )

//operações sobre o arquivo

Abre o arquivo text dados.txt para que novos dados sejam escritos. Caso o
arquivo já exista, os dados existentes são perdidos e um novo arquivo é criado.
Fechando um arquivo
int fclose(FILE *fp)

fp: variável que aponta para o arquivo aberto

valor de retorno: 0 em caso de sucesso e EOF (-1) em caso de erro

O uso de fclose() garante que os dados que ainda estão no buffer sejam
transferidos para o arquivo
Exemplo de uso de fclose()
...

status = fclose(fp)

if(status == 0)

printf(“arquivo fechado com sucesso”)

else

printf(“não foi possível fechar o arquivo”)

...
Lendo um caractere
int fgetc(FILE *fp)

Lê um caractere no arquivo associado a fp e o retorna.

Se o final do arquivo for alcançado, retorna EOF (end of file).

do{

ch = getc(fp);

// demais operações

} while(ch != EOF);
Escrevendo um caractere
int fputc(int ch, FILE *fp)

Escreve o caractere ch no arquivo associado à variável fp.


Lendo strings
char *fgets(char *buf, int tamanho, FILE *fp)

Lê uma string no arquivo associado a fp e a coloca em buf.

A leitura é feita até que:

● EOF é encontrado
● Um caractere de nova linha é encontrado
● tamanho-1 caracteres são lidos

Após a leitura, um caractere ‘\0’ é inserido.


Escrevendo strings
int fputs(const char *buf, FILE *fp)

Escreve a string apontada por buf no arquivo associado a fp.


Verificando o final de um arquivo
int feof(FILE *fp)

Verifica se o ponteiro de arquivo indica uma posição válida (retorna 0) ou se está


apontando para o final do arquivo (retorna 1).

while(!feof(fp)){

// é possível fazer leitura e demais operações

}
Referências
Piteri, M. A. Manipulação de Arquivos com a Linguagem C, 2006.

Schildt, H. C Completo e Total. 3a edição. São Paulo: Makron Books, 1996.

Você também pode gostar