170 likes | 242 Views
Aula Prática 12 Operações com Arquivos Monitoria 2013.1. Introdução à Programação Engenharia da Computação. 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;.
E N D
Aula Prática 12 Operações com Arquivos Monitoria 2013.1 Introdução à ProgramaçãoEngenharia da Computação
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. • 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.
Exit • Aborta a execução do programa. • Protótipo: • void exit (int codigo_de_retorno); • Contida no arquivo de cabeçalho stdlib.h. • Importante para erros com arquivos e alocação dinâmica. • Exemplo: • if(!fp) exit(1);
Leitura e gravação em alto nível • Caractere a caractere • fgetce fputc • Linha a linha • fgets e fputs • Forma formatada • fscanf e fprintf • Bloco de dados • fread e fwrite
Caractere a caractere • intfgetc(FILE *fp); • Lê um caractere de fp • Retorna EOF se houver erro • Exemplo: • fgetc(fp); • intfputc(intc, FILE *fp); • Escreve um caractere em fp • Retorna EOF se houver erro • Exemplo: • fputc(‘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 • intfeof(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 do arquivo uma série de palavras e diga qual a maior e a menor, além da quantidade de dígitos de cada. (veja a quantidade de palavras até o fim do arquivo) • 2. O Grupo responsável por um dicionário está precisando ordenar as palavras. Mas eles possuem um arquivo com as palavras fora de ordem e pediu para vocês criarem um programa que gere, a partir desse, um arquivo com as palavras ordenadas. • 3. Um grupo de matemáticos precisam de um programa que leia sequências de operadores (A B C L) de um arquivo BINÁRIO para fazer a seguinte operação: • ( ( (A + (B x C ) ) + L) mod 26 ) + ‘a’ • sendo A,B,C inteiros e L um char. Salve o resultado num arquivo Binário, • na forma de caracteres. Depois de tudo, salve em outra linha do arquivo o • tamanho da string gerada.