1 / 18

Arquivos

Arquivos. Prof. Luis Otavio Alvares. Introdução. a linguagem C utiliza o conceito de fluxo ( stream ) de dados para manipular vários tipos de dispositivos de armazenamento. Dados podem ser manipulados em dois diferentes tipos de fluxos: fluxos de texto e fluxos binários.

katina
Download Presentation

Arquivos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Arquivos Prof. Luis Otavio Alvares

  2. Introdução • a linguagem C utiliza o conceito de fluxo (stream) de dados para manipular vários tipos de dispositivos de armazenamento. • Dados podem ser manipulados em dois diferentes tipos de fluxos: fluxos de texto e fluxos binários. • Um fluxo de texto é composto por uma seqüência de caracteres, que pode ou não ser dividida em linhas terminadas por um caracter de final de linha.

  3. Arquivos • Um arquivopodeestarassociado a qualquerdispositivo de entrada e saída, comoporexemplo: teclado, video, impressora, disco rígido, etc. • O processo de trabalhar com arquivos em C consiste em três etapas: • Abrir o arquivo; • Ler e/ou gravar as informaçõeses desejadas no arquivo; • Fechar o arquivo.

  4. Funções de entrada e saída As funçõesmaisusadasestãoarmazenadasnabibliotecastdio.h • fopen() - Abre um arquivo • fputc() - Escreve um caracter em um arquivo • fgetc() - Lê um caracter de um arquivo • fputs() – escreveuma string em um arquivo • fgets() – lêumalinha de um arquivo • fprintf()- Equivalente a printf() • fscanf() - Equivalente a scanf() • rewind() - Posiciona o arquivo no início • feof() - Retorna verdadeiro se chegou ao fim do arquivo • fclose() – fecha

  5. Abertura de arquivo • Antes de qualquer operação ser executada com o arquivo, ele deve ser aberto. Esta operação associa um fluxo de dados a um arquivo. • Um arquivo pode ser aberto de diversas maneiras: leitura, escrita, leitura/escrita, adicão de texto, etc. A função utilizada para abrir o arquivo é fopen()

  6. A função fopen() fopen(nome arquivo,modo de uso). Os modos de uso mais comuns são: • r (de read) : abre um arquivo texto para leitura • w (de write) : cria um arquivo texto para escrita • a (de append) : para adicionar conteúdo no fim de um arquivo texto já existente • r+ : abre um arquivo texto para leitura/escrita • w+ : cria um arquivo texto para leitura/escrita

  7. Exemplo de uso #include<stdio.h> #include<stdlib.h> int main(){ FILE *arquivo; //vai ser associada ao arquivo arquivo = fopen("c:/luis/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"); }

  8. Leitura e gravação • fgets (string, tamanho, arquivo) • fputs(string, arquivo) • fgetc(arquivo) • fputc(char, arquivo)

  9. Exemplo: programa que faz copia de um arquivo //copia o conteudo do arquivo tmp.txt em tmpCopy.txt #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( "tmp.txt", "r" ); if(input){ output = fopen( "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");

  10. continuação // outra forma de copiar (caracter a caracter) input = fopen("tmp.txt", "r"); if(input){ output = fopen( "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"); }

  11. 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]); }

  12. // 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 não chegar no final do arquivo p { printf("%s",mostratexto); fgets(mostratexto, 50, p); } fclose(p); // Fecha o arquivo p

  13. // 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"); }

  14. Exercício Faça um programa que decodifique um determinado texto gravado em um arquivo, a partir da seguinte tabela de substituição de caracteres, gerando um novo arquivo:

  15. //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"); }

  16. Exercício 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.

  17. Exemplo de solução //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

  18. continuação // 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"); }

More Related