You are on page 1of 22

ENTRADA E SADA

Prof. Danielson Rodrigues

LINGUAGEM C VIII. ENTRADA E SADA


Operaes de C para leitura e gravao em disco. Operaes em disco so executadas em arquivos. A biblioteca C oferece um pacote de funes para acessar arquivos de quatro maneiras diferentes:
Os dados so lidos e escritos um caractere por vez. Oferece as funes getc() e putc(). Os dados so lidos e escritos como strings. Oferece as funes fgets() e fputs(). Os dados so lidos e escritos de modo formatado. Oferece as funes fscanf() e fprintf(). Os dados so lidos e escritos num formato chamado registro ou bloco. usado para armazenar seqncias de dados como vetores e estruturas. Oferece as funes fread() e fwrite().

ARQUIVOS TEXTO
Um arquivo aberto em modo texto interpretado em C como seqncias de caracteres agrupadas em linhas. As linhas so separadas por um nico caractere chamado caractere de nova linha ou LF (line feed), de cdigo ASCII 10 decimal. equivalente ao caractere '\r'.

ARQUIVOS TEXTO EXEMPLO 1


Cria um codigo que l caracteres de um arquivo texto e armazena em outro arquivo texto. Para executar este exemplo, crie um arquivo texto de nome entrada.txt, contendo algumas frases. Este arquivo pode ser criado em qualquer editor de texto no formatado (evite usar o Word ou o WordPad, por serem de texto formatado. Utilize, por exemplo, o prprio compilador ou o Bloco de Notas). Por exemplo, o arquivo entrada.txt pode ter o seguinte contedo:

ARQUIVOS TEXTO EXEMPLO 1


Este programa copia um ficheiro de texto entrada.txt para outro saida.txt. Se saida.txt no existir ele ser criado automaticamente. A estrutura FILE est presente na biblioteca stdio.h e armazena informaes sobre o arquivo.

ARQUIVOS TEXTO
As funes fopen() e fclose()
Quando abrimos um arquivo, a informao que recebemos (se o arquivo for aberto) um ponteiro para a estrutura FILE. Cada arquivo que abrimos ter uma estrutura FILE com um ponteiro para ela. A funo fopen() tem a seguinte sintaxe:

Esta funo recebe como argumentos o nome do arquivo a ser aberto (filename) e o modo de abertura (mode). Retorna um ponteiro para a estrutura FILE, que armazena informaes sobre o arquivo aberto.

ARQUIVOS TEXTO
O nome do arquivo pode ser fornecido com ou sem o diretrio onde ele est localizado. Caso se deseje fornecer o caminho completo do arquivo, lembre-se que a contrabarra em C no um caractere, e sim um meio de fornecer caracteres especiais. O caractere contrabarra representado por '\\'. Ou seja, em DOS o caminho completo de um arquivo pode ser, por exemplo, "C:\\temp\\saida.txt".

ARQUIVOS TEXTO
Diferentes modos de abertura de arquivos:

Alm destes modos podem ser adicionados os seguintes modificadores.

ARQUIVOS TEXTO
Se um arquivo for aberto, a funo retorna um ponteiro para a estrutura FILE contendo as informaes sobre o arquivo. Caso contrrio, retorna NULL. O erro na abertura de arquivo pode ser causado por diversos fatores: espao insuficiente em disco (no caso de gravao), arquivo inexistente (no caso de leitura) etc. Ao ser aberto um arquivo necessrio que ele seja fechado aps utilizado. Isto feito por meio da funo fclose(). Sua sintaxe a seguinte:
Exemplo:

ARQUIVOS TEXTO
As funes getc() e putc()
A funo getc() l um caractere por vez do arquivo.

Sua sintaxe :
A funo recebe como argumento um ponteiro para FILE e retorna o caractere lido. Em caso de erro, retorna EOF. A funo putc() o complemento de getc(). Ela escreve um caractere no arquivo.

Sua sintaxe
A funo recebe como argumentos um caractere e um ponteiro para FILE. O valor retornado o prprio caractere fornecido. Em caso de erro, a funo retorna EOF.

ARQUIVOS TEXTO EXEMPLO 2


Faz o mesmo do exemplo 1, A nica diferena que ao invs de acessar os arquivos texto caractere a caractere, eles sero acessados linha a linha.

ARQUIVOS TEXTO
As funes fgets () e fputs()
A funo fgets() tem a seguinte sintaxe.
char* fgets(char* s, int n, FILE* f);

Esta funo l caracteres do arquivo f e os coloca na string s. A funo pra de ler quando l n-1 caracteres ou o caractere LF ('\r'), (o que vier primeiro).
O caractere LF includo na string. O caractere nulo anexado ao final da string para marcar seu final.

Em caso de xito, a funo retorna s. Em caso de erro ou fim do arquivo, retorna NULL.

ARQUIVOS TEXTO
A funo fputs()
A funo fputs() o complemento de fgets(). Ela escreve uma seqncia de caracteres no arquivo. Sua sintaxe :
char* fputs(char* s, FILE* f);

A funo recebe como argumentos uma string e um ponteiro para FILE. O valor retornado o ltimo caractere fornecido. Em caso de erro, a funo retorna EOF. Note que a funo copia a string fornecida tal como ela para o arquivo. Se no existir a string, no inserido o caractere de nova linha (LF) nem o caractere nulo.

ARQUIVOS TEXTO
O programa a seguir l dados de um ficheiro, executa um processamento com os dados lidos e grava os resultados em outro arquivo, em forma de um relatrio de sada.

As sintaxes de fprintf() e fscanf() so semelhantes s sintaxes de printf() e scanf() excepto pela incluso do primeiro argumento, que um ponteiro para a estrutura FILE.

ARQUIVOS TEXTO
As funes fprintf() e fscanf()
Para leitura e gravao de arquivos com formatao, so utilizadas as funes fprintf() e fscanf(). Estas funes so semelhantes a printf() e scanf(), utilizadas ao longo do curso.

ARQUIVOS BINRIOS
Os dados so armazenados em arquivos binrios da mesma forma que so armazenados na memria do computador. Ou seja, ao guardarmos o valor de uma varivel float num arquivo binrio, ela ocupa no arquivo os mesmos 4 bytes que ocupa na memria. Arquivos guardados em modo binrio no so facilmente entendidos por uma pessoa que o esteja lendo. Em compensao, para um programa muito fcil interpretar este arquivo. Ao guardarmos valores em modo texto, o compilador converte o valor da varivel para uma forma de apresentlo atravs de caracteres. Por exemplo, o nmero inteiro 20000, apesar de ocupar somente dois bytes na memria, para ser armazenado em um arquivo texto ocupa pelo menos cinco bytes, j que cada caractere ocupa um byte.

ARQUIVOS BINRIOS
Arquivos binrios normalmente so menores que arquivos texto, contendo a mesma informao. A velocidade de leitura do arquivo tambm consideravelmente reduzida ao utilizarmos arquivos binrios. Em compensao, a visualizao do arquivo no traz nenhuma informao ao usurio, pelo fato de serem visualizados os caracteres correspondentes aos bytes armazenados na memria. No caso de variveis char, a visualizao idntica em arquivos texto e binrios.

ARQUIVOS BINRIOS EXEMPLO 1


O programa abaixo grava um arquivo binrio contendo 2 vetores de 20 elemento cada um: o primeiro vetor de caracteres e o segundo de variveis inteiras.

Ao executar este programa, ele gera um arquivo binrio, binario.bin. Se voc tentar visualizar este arquivo num editor como o Bloco de Notas, do Windows, conseguir distinguir os 20 primeiros bytes, que o vetor de caracteres. A partir da, os bytes utilizados pelo compilador para armazenar os valores inteiros no fazem mais sentido quando visualizados..

ARQUIVOS BINRIOS EXEMPLO 2


O programa abaixo l o arquivo binario.bin e apresenta os valores lidos na tela.

POSICIONAMENTO AO LONGO DE UM ARQUIVO


Sempre que se abre um arquivo para leitura (r) ou escrita (w) ficamos posicionados na posio ZERO do arquivo, isto , imediatamente antes do primeiro byte. Se o arquivo for aberto para acrescentar (a) ficamos posicionados aps o ltimo byte do arquivo. S faz sentido falar em posicionamento em arquivos quando estamos processando arquivos binrios.

POSICIONAMENTO AO LONGO DE UM ARQUIVO


Para saber a posio actual de um ficheiro temos:
long ftell(FILE *arq)

Para voltar a colocar o ponteiro a apontar para o inicio do arquivo temos a funo:
void rewind(FILE *arq)

POSICIONAMENTO AO LONGO DE UM ARQUIVO


Para apontar o ponteiro para qualquer posio do arquivo temos a funo:
int fseek(FILE *arq, long salto, int origem)
arq representa o arquivo sobre o qual pretendemos operar salto indica o numero de bytes que pretendemos andar (valor positivo-indica andar para frente, valor negativo andar para trs) origem indica o local a partir do qual queremos realizar o salto no arquivo. So admitidos apenas trs valores, assim definidos
Constante SEEK_SET SEEK_CUR SEEK_END Valor 0 1 2 Significado o salto realizado a partir da origem do arquivo. o salto realizado a partir da posio corrente do arquivo. o salto realizado a partir do final do arquivo.

You might also like