Você está na página 1de 41

Linguagem C – Entrada e Saída

em Disco

Algoritmos e Estruturas de Dados I


Prof. Christiano Colen Venancio
UNIPAC 2007
Introdução
■ A principal vantagem na utilização de um
arquivo está no fato de as informações
armazenadas poderem ser utilizadas a
qualquer momento, além do fato que discos
armazenam centenas de megabytes
utilizando quase que nenhum espaço físico.

Christiano Colen
UNIPAC - 2007
Arquivos Físicos e Lógicos
■ Arquivo físico: quando nos referimos a um certo
arquivo em disco, estamos nos referindo a uma
seqüência particular de bytes armazenados no
disco. Um disco pode conter centenas ou
milhares de arquivos físicos distintos.
■ Arquivo lógico: é o arquivo segundo o ponto de
vista do aplicativo que o acessa. Cada arquivo
manipulado pelo aplicativo é tratado como se um
canal de comunicação fosse estabelecido entre o
aplicativo e o arquivo em disco.
Christiano Colen
UNIPAC - 2007
Manipulando um Arquivo em C
■ Definição do tipo FILE o qual se caracteriza por
ser uma estrutura formada por elementos do
mesmo tipo dispostos de forma seqüencial, tendo
como finalidade fazer a comunicação entre a
memória principal (RAM) e a memória
secundária (meios magnéticos), através do
programa e do sistema operacional. Portanto, a
estrutura FILE guarda as informações específicas
sobre o arquivo que devem estar presentes antes
que o programa possa acessá-lo.
Christiano Colen
UNIPAC - 2007
Sintaxe
■ FILE *<ARQ_LOGICO>;
■ Para abrir um arquivo usamos o seguinte
comando:
– ARQ_LOGICO = fopen ( “ARQ_FISICO”,
“modo” );

Christiano Colen
UNIPAC - 2007
Manipulando arquivos
■ Assim, geração do código de programa que
abre um arquivo requer três informações:
1. ARQ_FISICO : o nome do arquivo físico que
deverá ser aberto;
2. ARQ_LOGICO : a variável que guardará
informações sobre o arquivo.
3. modo: o estado desejado para a abertura, ou
seja, que tipo de uso você vai fazer do arquivo.
Christiano Colen
UNIPAC - 2007
Christiano Colen
UNIPAC - 2007
Fechando um arquivo
■ Quando um arquivo é aberto, os dados são
armazenados temporariamente em uma área de
memória, conhecido como buffer.
■ O buffering permite trabalhar com grandes
quantidades de dados em RAM, de modo a reduzir o
número de acessos que precisam ser feitos ao
dispositivo de armazenamento secundário.
■ Para o fechamento de um arquivo utiliza-se a função
fclose( ). Esta função transfere os dados dessa área de
memória para o disco.
Christiano Colen
UNIPAC - 2007
Fechando um arquivo
■ O fechamento do arquivo é necessário para a
liberação das áreas de comunicação usadas,
para que estejam disponíveis a outros arquivos.
Estas áreas incluem a estrutura FILE e o
buffer. Ou ainda, o fechamento do arquivo
encerra a comunicação entre os arquivos lógico
e físico.
■ Sintaxe:
– fclose (ARQ_LOGICO );
Christiano Colen
UNIPAC - 2007
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> // para a função exit ( )
#define ARQ "c:\arq_teste.txt"
#define MODO “w”
int main( )
{
FILE *fp; //ponteiro para a estrutura do arquivo
fp = fopen(ARQ, MODO);

Christiano Colen
UNIPAC - 2007
if ( fp== NULL)
{
printf ("O arquivo nao pode ser aberto");
system(“pause”);
exit (1);
}
fclose(fp);
}
Christiano Colen
UNIPAC - 2007
Leitura e Escrita em Arquivos
■ fprintf (ARQ_LOGICO , “ expressão de
controle ” );
ou
■ fprintf (ARQ_LOGICO , “expressão de
controle ” , lista de argumentos );

Christiano Colen
UNIPAC - 2007
Leitura e Escrita em Arquivos
■ fscanf (ARQ_LOGICO , “ % t ” , &
NOME_DA_VARIÁVEL ) ;
■ void rewind ( FILE *fp ); //Reposiciona no
início do arquivo

Christiano Colen
UNIPAC - 2007
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> // para a função exit ( )
#define ARQ "c:\arq_teste.txt"
#define MODO " w+ "
#define MAX 50
//Definição de Tipos
typedef char cadeia[50];
//Prototipação das funções
FILE * AbreArquivo( cadeia path, cadeia modo);
Christiano Colen
UNIPAC - 2007
int main ( )
{
FILE *fp; //ponteiro para a estrutura do arquivo
char palavra[MAX];
fp = AbreArquivo(ARQ, MODO);
// Le uma cadeia de caracteres do teclado e escreve
no arquivo ARQ
printf ( "Digite uma palavra e aperte o enter: ");
scanf(“%s”, &palavra);
fprintf (fp, "%s", palavra);
Christiano Colen
UNIPAC - 2007
rewind (fp ); //posiciona o ponteiro no início
do arquivo
printf ("\n O conteudo do arquivo: ");
fscanf (fp, "%s", &palavra);
printf ( "%s", palavra);
fclose(fp);
getch( );
}
Christiano Colen
UNIPAC - 2007
//Especificação do corpo das funções
FILE * AbreArquivo( cadeia path, cadeia modo)
{
FILE * arq;
arq = fopen(path, modo);
if ( arq== NULL)
{
printf ("\nO arquivo %s nao pode ser aberto.", path);
getch( );
exit (1);
}
return arq;
} Christiano Colen
UNIPAC - 2007
Verificando fim de arquivo
■ Podemos também usar a função feof ( ) para
verificar fim de arquivo. Ela retorna não-
zero se o arquivo chegou ao EOF, caso
contrário, retorna zero.
■ Sintaxe:
– int feof (FILE *fp );

Christiano Colen
UNIPAC - 2007
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> // para a função exit ( )
#define ARQ "c:\arq.txt"
#define MODO " w+ ”
//Definição de Tipos
typedef char cadeia[50];
//Prototipação das funções
FILE * AbreArquivo( cadeia path, cadeia modo);

Christiano Colen
UNIPAC - 2007
int main( )
{
FILE *fp; //ponteiro para a estrutura do arquivo
int i, num, tam;
fp = AbreArquivo(ARQ, MODO);
printf ( "Digite a quantidade de elementos: ");
scanf ( "%d", &tam);
fprintf (fp, "%d\n", tam);

Christiano Colen
UNIPAC - 2007
for (i=0; i < tam; i++) {
printf ( Digite o %d.o elemento: ", (i+1));
scanf ("%d", &num);
fprintf (fp, "%d ", num);
}
rewind (fp ); //posiciona o ponteiro no início do
arquivo

Christiano Colen
UNIPAC - 2007
printf ( "\n O conteudo do arquivo eh: ");
while ( !feof (fp) )
{
fscanf (fp, "%c", &num);
printf ("%c", num);
}
fclose(fp);
system("pause");
}

Christiano Colen
UNIPAC - 2007
//Especificação do corpo das funções
FILE * AbreArquivo( cadeia path, cadeia modo)
{
FILE * arq;
arq = fopen(path, modo);
if ( arq== NULL)
{
printf ("\nO arquivo %s nao pode ser aberto.", path);
getch( );
exit (1);
}
return arq;
} Christiano Colen
UNIPAC - 2007
Lendo e Escrevendo um
Caractere no arquivo
■ A função putc toma o caractere ch e o grava
no arquivo cuja estrutura FILE é apontada
por fp:
■ SINTAXE:
– int putc (int ch, FILE *fp );
■ A função getc ( ) retorna o caractere lido do
arquivo:
■ SINTAXE:
– int getc (FILE *fpChristiano
); Colen
UNIPAC - 2007
Fim de Arquivo - EOF
■ A maior diferença entre um programa que está
gravando e um que está lendo um caractere é que
o que está lendo deve reconhecer quando estiver
lendo o último caractere do arquivo.
■ EOF é uma macro definida em stdio.h que
significa fim do arquivo. É importante entender
que EOF não é um caractere mais sim um valor
inteiro enviado ao programa pelo sistema
operacional com valor –1.
Christiano Colen
UNIPAC - 2007
Fim de Arquivo - EOF
■ Assim, se uma operação com a função putc
( ) for satisfatória, ela retornará o caractere
escrito. Em caso de falha um EOF é
retornado.
■ A função getc ( ) retornará EOF quando o
fim do arquivo tiver sido encontrado ou um
erro tiver ocorrido.

Christiano Colen
UNIPAC - 2007
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> // para a função exit ( )
#define ARQ ”c:\arq_teste.txt"
#define MODO “r”
//Prototipação das funções
FILE * AbreArquivo( cadeia path, cadeia modo);

Christiano Colen
UNIPAC - 2007
int main( )
{
FILE *fp; //ponteiro para a estrutura do arquivo
char ch;
fp = AbreArquivo (ARQ, MODO);
while ( (ch = getc ( fp ) ) != EOF ) /* Enquanto não
chegar ao final do arquivo */
printf ( "%c ", ch );
fclose(fp);
system("pause");}
Christiano Colen
UNIPAC - 2007
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> // para a função
exit ( )
#define ARQ ”c:\arq_teste.txt"
#define MODO “r”
//Prototipação das funções
FILE * AbreArquivo( cadeia path,
cadeia modo);
Christiano Colen
UNIPAC - 2007
int main( )
{
FILE *fp; //ponteiro para a estrutura do
arquivo
char ch;
fp = AbreArquivo(ARQ, MODO);
ch = getc ( fp ); /* Le o primeiro caracter */

Christiano Colen
UNIPAC - 2007
while ( !feof ( fp ) ) /* Enquanto não
chegar ao final do arquivo */
{
printf ( "%c ", ch ); /* Imprime o
caracter na tela */
ch = getc ( fp ); /* Le um novo
caracter no arquivo */
}
fclose(fp);
system("pause");}
Christiano Colen
UNIPAC - 2007
Lendo e Escrevendo uma cadeia
de caracteres (string) no arquivo
■ A função fputs ( ) funciona como puts ( ), só que
ela escreve uma cadeia de caracteres em um
arquivo especificado.
■ SINTAXE:
– int fputs (“ expressão de controle ”, FILE *fp );int
feof (FILE *fp );
■ Na função fputs ( ) um EOF é devolvido se
ocorre um erro.
Christiano Colen
UNIPAC - 2007
Lendo e Escrevendo uma cadeia
de caracteres (string) no arquivo
■ A função fgets ( ) lê uma cadeia de
caracteres de um arquivo especificado:
■ SINTAXE:
– char *fgets (“ expressão de controle ”, int
tamanho, FILE *fp );

Christiano Colen
UNIPAC - 2007
Lendo e Escrevendo uma cadeia
de caracteres (string) no arquivo
■ A função fgets ( ) recebe três argumentos:
– Uma cadeia de caracteres a ser lida;
– O limite máximo de caracteres a serem lidos. Na
verdade este número deve ser pelo menos um maior
que o número de caracteres lidos, pois fgets ( )
acrescenta o caracteres NULL (' \0 ') na próxima
posição livre.
– Ponteiro para FILE, que está associado ao arquivo de
onde a cadeia de caracteres será lida.

Christiano Colen
UNIPAC - 2007
Lendo e Escrevendo uma cadeia
de caracteres (string) no arquivo
■ A função fgets ( ) termina a leitura após ler
um caractere de nova linha ( '\n' ) ou um
caractere de fim de arquivo ( EOF).

Christiano Colen
UNIPAC - 2007
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> // para a função exit ( )
#define ARQ "c:\arq_teste.txt"
#define MODO “r”
#define MAX 81

Christiano Colen
UNIPAC - 2007
//Prototipação das funções
FILE * AbreArquivo( cadeia path, cadeia modo);
int main( )
{
FILE *fp; //ponteiro para a estrutura do arquivo
char palavra[MAX];
fp = AbreArquivo(ARQ, MODO);
Christiano Colen
UNIPAC - 2007
while ( fgets ( palavra, MAX-1, fp) != NULL)
puts (palavra);
fclose(fp);
system("pause");}

Christiano Colen
UNIPAC - 2007
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> // para a função exit (
)
#define ARQ "c:\arq_teste.txt"
#define MODO “r”
#define MAX 50
//Prototipação das funções
Christiano Colen
FILE * AbreArquivo(
UNIPAC - 2007 cadeia path,
int main( )
{
FILE *fp; //ponteiro para a estrutura do
arquivo
char palavra[MAX];
fp = AbreArquivo (ARQ, MODO);
// Le uma cadeia de caracteres do teclado
e escreve no arquivo ARQ
printf ( "Digite uma palavra : ");
gets (palavra);
fputs (palavra, fp);Christiano Colen
UNIPAC - 2007
rewind (fp ); //posiciona o ponteiro
no início do arquivo
printf ("\n O conteudo do arquivo: ");
fgets ( palavra, MAX-1, fp);
puts (palavra);
fclose(fp);
system("pause");}

Christiano Colen
UNIPAC - 2007

Você também pode gostar