160 likes | 228 Views
Operações com Arquivos Monitoria 2012.2. A estrutura FILE. É como um tipo de dado, mas não é um tipo propriamente dito Definido no arquivo cabeçalho stdio.h da biblioteca Declarar um ponteiro de arquivo Exemplo: FILE *fp;. Abrindo e Fechando Arquivos.
E N D
Operações com Arquivos Monitoria 2012.2
A estrutura FILE • É como um tipo de dado, mas não é um tipo propriamente dito • Definido no arquivo cabeçalho stdio.h da biblioteca • Declarar um ponteiro de arquivo • Exemplo: • FILE *fp;
Abrindo e Fechando Arquivos • FILE *fopen(char *nomeDoArquivo, char *modo); • Abre um arquivo e retorna um ponteiro para ele • Se algum erro ocorrer a constante NULL é retornada • Exemplo: • fp = fopen(“Arquivo.txt”, “r”); • É de fundamental importância verificar se o arquivo foi aberto corretamente • O nome do arquivo deve conter também a suta extensão. • int fclose(FILE *fp); • Fecha o arquivo passado como parâmetro • Retorna 0 se o arquivo foi fechado corretamente • Retorna a constante EOF se algum erro ocorreu • Exemplo: • fclose(fp); • É muito importante fechar todos os arquivos que o seu programa abriu, isto evita a perda dos dados armazenados no buffer. • Fechar um arquivo faz com que qualquer caractere que tenha permanecido no "buffer" associado ao fluxo de saída seja gravado.
Leitura e gravação em alto nível • Caractere a caractere • getc e putc • Linha a linha • fgets e fputs • Forma formatada • fscanf e fprintf • Bloco de dados • fread e fwrite
Caractere a caractere • int getc(FILE *fp); • Lê um caractere de fp • Retorna EOF se houver erro • Exemplo: • getc(fp); • int putc(int c, FILE *fp); • Escreve um caractere em fp • Retorna EOF se houver erro • Exemplo: • putc(‘A’, fp);
Linha a linha • char *fgets(char *str, int tamanho, FILE *fp); • Lê no máximotamanho caracteres de fp e guarda em str • Se a função encontrar ‘\n’ ou EOF ela para • Exemplo: • fgets(string, 80, fp); • char *fputs(char *str, FILE *fp); • Imprime uma string no arquivo • Exemplo: • fputs(string, fp);
Forma formatada • int fscanf(FILE *pf, char *str, ...); • Similar a scanf() porém lê de um arquivo • Exemplo: • fscanf(fp, “%d %c”, &num, &ch); • int fprintf(FILE *pf, char *str, ...); • Similar a printf() porém escreve em um arquivo • Exemplo: • fprintf(fp, “%d %c”, num, ch);
fread • int fread(void *buffer, int numBytes, int qtd, FILE *pf); • buffer é o local onde os dados lidos do arquivo serão guardados • numBytes é o tamanho da unidade a ser lida • qtd é o número máximo de unidades a serem lidas • pf é o arquivo do qual se deseja ler • O retorno é o número de unidades efetivamente lidas • Exemplo: FILE *pf = fopen(“meuArquivo”, “r”); int mat[12]; fread(mat, sizeof(int), 10, pf);
fwrite • int fwrite(void *buffer, int numBytes, int qtd, FILE *pf); • buffer é o local que contém os dados a serem gravados • numBytes é o tamanho da unidade a ser gravada • qtd é o número de unidades a serem gravadas • pf é o arquivos do no qual se deseja gravar os dados • O retorno é o número de unidades efetivamente gravadas • Exemplo: FILE *pf = fopen(“meuArquivo”, “w”); int mat[] = { 1, 2, 3, 4 }; fwrite(mat, sizeof(int), 4, pf);
ferror e perror • int ferror(FILE *fp); • Retorna zero se não houver erros na última operação realizada com um arquivo • Caso contrário retorna não-zero • perror (char *mensagem) • é usada em conjunto com ferror, e indica em que parte do programa ocorreu um erro. Recebe como argumento uma string. • Exemplo: • if(ferror(fp)) { perror("Erro na gravacao"); exit(1);}
fseek • int fseek(FILE *pf, long numBytes, int origem); • Move a posição corrente de leitura ou escrita em um arquivo • pf é o arquivo que se deseja percorrer • numBytes é o número de bytes a serem movidos • retorna 0 em caso de sucesso ou não-zero caso contrário. • origem é o ponto de partida(geralmente usa-se as macros abaixo):
rewind e remove • void rewind(FILE *fp); • Move o cursor para o inicio do arquivo • Exemplo: • rewind(fp); • int remove(char *Arquivo); • Apaga o arquivo que passamos o ponteiro. • Retorna zero se ocorreu sucesso • Não zero em caso de erro • Exemplo: • remove(“Arquivo.txt”);
Verificando fim de arquivo • int feof(FILE *fp); • Indica o fim de um arquivo • Retorna não-zero se o arquivo chegou ao fim e zero caso contrário • Outra maneira de verificar o término do arquivo é comparar um caractere lido com EOF.
Exercícios 1) Escreva um programa que leia um arquivo e imprime no final desse mesmo arquivo, sem sobrescreve-lo, qual é o caractere que mais se repete. O nome do arquivo a ser lido deve ser dado pelo usuario. 2)Faça um programa que lê de um arquivo, o sexo, o primeiro nome, e a idade de uma lista de pessoas. Imprima em outro arquivo, o número de homens, o número de mulheres e a idade da pessoa mais velha. A primeira linha do arquivo de entrada deve conter o número de pessoas. Ex: Entrada.txt 3 M Joao 40 F Maria 32 M Carlos 27 Saída.txt O numero de homens: 2 O numero de mulheres: 1 A idade da pessoa mais velha e: 40