Вы находитесь на странице: 1из 21

FACOL Faculdade Osman da Costa Lins

Curso de Bacharelado em Sistemas de


Informao

Fonte: Jos Francisco Salm Junior (Diretor de Engenharia de Sistemas Instituto Stela)

Linguagens e Tcnicas de
Programao II
Aula 06: Arquivos

Prof. Walter Felipe


walterfelipesantos@gmail.com
19/09/2016

Dicas

Diversas vdeo aulas e cursos em vdeo:

1- https://www.youtube.com/playlist?
list=PL65GXbMNWBWZ85GBjUBuG6lwjO8WwihKH
2-https://www.youtube.com/watch?v=1nd5yEDxO0g&list=PLC9E87254BD7A875B
3-https://www.youtube.com/playlist?list=PLZ8dBTV2_5HTGGtrPxDB7zx8J5VMuXdob
4-https://www.youtube.com/watch?
v=FH7YrE0RjWE&list=PLesCEcYj003SwVdufCQM5FIbrOd0GG1M4
5-https://www.youtube.com/watch?
v=VnH7OVFj_pA&list=PLa75BYTPDNKZWYypgOFEsX3H2Mg-SzuLW

Agenda

Arquivos

Conceitos
Aplicaes
Sintaxe
Exemplos

Exerccios

Introduo

a linguagem C utiliza o conceito de fluxo


(stream) de dados para manipular vrios
tipos de dispositivos de armazenamento.
Dados podem ser manipulados em dois
diferentes tipos de fluxos: fluxos de
texto e fluxos binrios.
Um fluxo de texto composto por uma
seqncia de caracteres, que pode ou
no ser dividida em linhas terminadas
por um caracter de final de linha.

Arquivos

Um arquivo pode estar associado a


qualquer dispositivo de entrada e sada,
como por exemplo: teclado, video,
impressora, disco rgido, etc.

O processo de trabalhar com arquivos em


C consiste em trs etapas:
1.
2.

3.

Abrir o arquivo;
Ler e/ou gravar as informaeses desejadas
no arquivo;
Fechar o arquivo.

Funes de entrada e sada

As funes mais usadas esto armazenadas na


biblioteca stdio.h

fopen() - Abre um arquivo


fputc() - Escreve um caracter em um arquivo
fgetc() - L um caracter de um arquivo
fputs() escreve uma string em um arquivo
fgets() l uma linha de um arquivo
fprintf()- Equivalente a printf()
fscanf() - Equivalente a scanf()
rewind() - Posiciona o arquivo no incio
feof() - Retorna verdadeiro se chegou ao fim do
arquivo
fclose() fecha

Abertura de arquivo

Antes de qualquer operao ser


executada com o arquivo, ele deve ser
aberto. Esta operao associa um fluxo
de dados a um arquivo.
Um arquivo pode ser aberto de diversas
maneiras: leitura, escrita,
leitura/escrita, adico de texto, etc. A
funo utilizada para abrir o arquivo
fopen()

A funo fopen()
fopen(nome arquivo,modo de uso).

Exemplo de uso
#include<stdio.h>
#include<stdlib.h>
int main(){
FILE *arquivo; //vai ser associada ao arquivo
arquivo = fopen("c:/teste9.txt","r");
if(arquivo==0)
printf("Erro na leitura do arquivo\n");
else
printf("Arquivo aberto com sucesso\n");
fclose(arquivo); //fecha arquivo
system("pause");
}

Leitura e gravao

fgets (string, tamanho, arquivo)


fputs(string, arquivo)
fgetc(arquivo)
fputc(char, arquivo)

Exemplo: programa que faz copia de


//copia o conteudo do arquivo tmp.txt em tmpCopy.txt
um arquivo
#include<stdio.h>
#include<stdlib.h>
#define MAX 80
main(){
int ch;
char linha[MAX];
FILE *input, *output;
// uma forma de copiar (linha a linha)
input = fopen( c:/tmp.txt", "r" );
if(input){
output = fopen( c:/tmpCopy2.txt", "w" );
fgets(linha, MAX, input);
while(!feof(input) ) {
fputs( linha, output );
fgets(linha, MAX, input);
}
fputs( linha, output ); //para escrever a ultima linha
(do EOF)
fclose( input );
fclose( output );
}
else printf ("deu erro na abertura do arquivo tmp.txt\n");
system("pause");

continuao
// outra forma de copiar (caracter a caracter)
input = fopen(c:/tmp.txt", "r");
if(input){
output = fopen( c:/tmpCopy.txt", "w" );
ch = fgetc( input );
while( ch != EOF ) {
fputc( ch, output );
ch = fgetc( input );
}
fclose( input );
fclose( output );
}
else printf ("deu erro na abertura do arquivo
tmp.txt\n");
system("pause");
}

Exemplo mais completo

// grava o nome de cinco alunos em um arquivo e depois le o


arquivo e // mostra os nomes escritos
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main(){
FILE *p;
char c, str[30], frase[80] = "Este e um arquivo chamado: ;
char alunos [5][50], mostratexto [50];
int i,j=0, cont=0;
// Le um nome para o arquivo a ser aberto:
printf("\n\n Entre com um nome para o arquivo:\n");
gets(str);
// le os nomes dos alunos e coloca no vetor alunos
for (cont=0;cont<5;cont++)
{
printf ("\nInforme o nome do aluno %d: ", cont+1);
gets(alunos[cont]);
}

// abre o arquivo para gravacao


if (!(p = fopen(str,"w"))) // Caso ocorra algum erro na abertura
//do arquivo da' mensagem e nao faz nada
{
printf("Erro! Impossivel abrir o arquivo!\n");
}
else {
// Se nao houve erro, grava o arquivo e o fecha ...
for (i=0; i<5; i++){
strcat(alunos[i], "\n"); //concatena o \n no final da linha
fputs(alunos[i],p);
// grava no arquivo p
}
fclose(p); // fecha o arquivo ao final da gravacao
printf("\nTerminei de escrever, agora vou ler.\n");
// Abre novamente, agora para leitura
p = fopen(str,"r");
//uma forma de mostrar
fgets(mostratexto, 50, p);
while (!feof(p)) // Enquanto no chegar no final do arquivo p
{
printf("%s",mostratexto);
fgets(mostratexto, 50, p);
}
fclose(p); // Fecha o arquivo p

// outra forma de mostrar


printf("\nde novo\n");
p = fopen(str,"r");
for (i=0; i<5; i++){
fgets(alunos[i], 50, p);
printf("%s",alunos[i]);
}
fclose(p);
// Fecha o arquivo
} // do else de erro de abertura do arquivo
system("pause");
}

Exerccio
Faa um programa que decodifique um determinado texto gravado em um arquivo,
a partir da seguinte tabela de substituio de caracteres, gerando um novo arquivo:

CARACTER EXISTENTE

SUBSTITUIR POR

//copia o conteudo do arquivo tmp.txt em tmpCopy.txt, com alteracoes


#include<stdio.h>
#include<stdlib.h>
main(){
int c;
FILE *ent, *sai;
ent = fopen("tmp.txt", "r");
if(ent){
sai = fopen( "tmpCopy.txt", "w" );
c = fgetc( ent );
while( c != EOF ) {
switch (c) {
case 'A': c='Z';break;
case 'E': c='Y';break;
case 'I': c='X';break;
case 'O': c='W';break;
case 'U': c='*';break;
}
fputc( c, sai );
c = fgetc( ent );
}
fclose( ent );
fclose( sai );
}
else printf ("deu erro na abertura do arquivo tmp.txt\n");
system("pause");
}

Exerccio
Considere um arquivo tipo texto j gravado.
Gere um novo arquivo com uma nova linha, com dados lidos do
teclado, entre a terceira e a quarta linha deste texto.
Mostre o conteudo do arquivo original e do novo.

Exemplo de soluo
//copia o conteudo do arquivo original.txt em copia.txt
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 150
main(){
int i;
char linha[MAX];
FILE *entrada, *saida;
entrada = fopen( "original.txt", "r" );
if(entrada){
saida = fopen( "copia.txt", "w" );
for (i=1;i<4;i++){
fgets(linha, MAX, entrada);//le as primeiras linhas
fputs(linha, saida );
// copia para o arquivo de saida
}
printf("Informe o conteudo da linha a ser inserida: ");
gets(linha);
strcat(linha,"\n");
fputs(linha, saida ); // escreve a linha adicionada

continuao
// copia o resto do arquivo, sem alteracao
fgets(linha, MAX, entrada);
while(!feof(entrada) ) {
fputs( linha, saida );
fgets(linha, MAX, entrada);
}
fputs( linha, saida ); //para escrever a ultima linha (do EOF)
fclose( entrada );
fclose( saida );
}
else printf ("deu erro na abertura do arquivo original.txt\n");
system("pause");
}

Fim

Dvidas??

Atividades para prxima aula:

Listas de exerccios.

21

Вам также может понравиться