Baixe o app para aproveitar ainda mais
Prévia do material em texto
SI 200 – Algoritmos e Programac¸a˜o de Computadores II Prof. Cla´udio Alessandro de Carvalho Silva cacs@ft.unicamp.br Aula 10 Manipulac¸a˜o de Arquivos em C Conteu´do 1 Introduc¸a˜o 2 Manipulac¸a˜o de Arquivos em C 3 Exemplos 4 Refere^ncias U¨bersicht 1 Introduc¸a˜o 2 Manipulac¸a˜o de Arquivos em C 3 Exemplos 4 Refere^ncias Arquivos Como manter dados persistentes utilizados ou gerados por um programa? Arquivos sa˜o estruturas de dados manipuladas fora da memo´ria principal. Exemplo Um sistema de banco de dados e´ composto por um ou va´rios arquivos, onde cada arquivo possui programas responsa´veis pelas seguintes operac¸o˜es: Inclusa˜o Exclusa˜o lo´gica Exclusa˜o f´ısica Alterac¸a˜o Consultas U¨bersicht 1 Introduc¸a˜o 2 Manipulac¸a˜o de Arquivos em C 3 Exemplos 4 Refere^ncias Arquivos em C O C ve^ cada arquivo como um simples fluxo sequencial de bytes. O C na˜o impo˜e nenhuma estrutura a um arquivo. Um “arquivo” em C pode representar diversas coisas: arquivos em disco, impressora, teclado ou qualquer dispositivo de E/S. Quando um programa e´ iniciado, tre^s arquivos sa˜o associados a ele: standard input, standard output e standard error. Declarac¸a˜o de arquivos em C Biblioteca stdio.h As varia´veis que representam arquivos sa˜o declaradas como ponteiros do tipo FILE FILE *arq, *file, *aux, *pont; Tipos de arquivos Arquivos texto. Arquivos bina´rios. Modos de abertura de arquivos Leitura – read – “r”: se o arquivo na˜o existir retorna erro. Escrita – write – “w”: cria novo arquivo mesmo se ja´ existir. Edic¸a˜o – append – “a”: abre arquivo existente ou cria se na˜o existir. Abertura/criac¸a˜o de arquivo: fopen() FILE *fopen(nome_do_arquivo, modo_de_abertura); nome do arquivo e´ o nome do arquivo no sistema operacional, podendo incluir o path. modo de abertura define propriedades e tipos de operac¸o˜es va´lidas. Exemplo 1 FILE * arq; 2 arq = fopen("arquivo1.dat", "w"); 3 4 if (arq == NULL) /* ou arq == 0 ou !arq */ 5 { 6 printf("\nErro.␣O␣arquivo␣n~ao␣foi␣aberto."); 7 getch(); 8 } 9 else { 10 /* as demais instruc¸~oes do programa */ 11 } Fechamento de arquivo: fclose() int fclose(FILE *arq); Retorna 0 se o arquivo foi fechado corretamente. Retorna outro valor em caso de erro. Escreve um caractere: fputc() int fputc(char c, FILE *arq); Se bem sucedido, retorna o valor caractere. Sena˜o retorna EOF. Le^ um caractere: fgetc() int fgetc(FILE *arq); Se bem sucedido, retorna o valor caractere. Sena˜o retorna EOF. Exemplo 1 #include <stdio.h> 2 int main () 3 { 4 FILE * pFile; 5 int c; 6 int n = 0; 7 pFile=fopen ("myfile.txt","r"); 8 if (pFile==NULL) perror ("Error␣opening␣file"); 9 else 10 { 11 do { 12 c = fgetc (pFile); 13 if (c == ’$’) n++; 14 } while (c != EOF); 15 fclose (pFile); 16 printf ("The␣file␣contains␣%d␣characters␣($).\n",n); 17 } 18 return 0; 19 } Escreve string: fputs() int fputs(const char *str, FILE *arq); Semelhante ao puts. Na˜o inclui ∖n no fim da string. Exemplo 1 #include <stdio.h> 2 3 int main () 4 { 5 FILE * pFile; 6 char sentence [256]; 7 8 printf ("Enter␣sentence␣to␣append:␣"); 9 fgets (sentence,256,stdin); 10 pFile = fopen ("mylog.txt","a"); 11 fputs (sentence,pFile); 12 fclose (pFile); 13 return 0; 14 } Le^ string: fgets() char * fgets(char * str, int tam, FILE * stream); Semelhante ao gets. Inclui ∖n no fim da string. Exemplo 1 #include <stdio.h> 2 3 int main() 4 { 5 FILE * pFile; 6 char mystring [100]; 7 8 pFile = fopen ("myfile.txt" , "r"); 9 if (pFile == NULL) perror ("Error␣opening␣file"); 10 else { 11 if ( fgets (mystring , 100 , pFile) != NULL ) 12 puts (mystring); 13 fclose (pFile); 14 } 15 return 0; 16 } Func¸o˜es fprintf() e fscanf() fprintf(arq, "string de controle", argumentos); fscanf(arq, "string de controle", argumentos); Ide^nticas a printf() e scanf(). Escreve qualquer tipo de dado fwrite() size_t fwrite( void *mem, size_t qtd_bytes, size_t cont, FILE *arq); Escreve qualquer tipo de dado. mem representa o conteu´do a ser gravado. cont representa o nu´mero de espac¸o de memo´ria do tamanho qtd bytes que devem ser gravados. Se bem sucedido, retorna cont. Le^ qualquer tipo de dado fread() size_t fread( void *mem, size_t qtd_bytes, size_t cont, FILE *arq); Le^ qualquer tipo de dado. mem varia´vel que vai receber o conteu´do lido. cont representa o nu´mero de espac¸o de memo´ria do tamanho qtd bytes que devem ser lidos. Se bem sucedido, retorna cont. Exemplo 1 double var, aux; 2 var = 0.3045; 3 4 fwrite(&var, sizeof(double), 1, arq); 5 fread(&aux, sizeof(double), 1, arq); Procura byte espec´ıfico fseek() int fseek(FILE * stream, long int qtd_bytes, int posicao); Posiciona o o ponteiro de leitura em um enderec¸o espec´ıfico tornando poss´ıveis leituras e escritas aleato´rias. qtd bytes que sera´ percorrida a partir de posicao. posicao SEEK SET – in´ıcio do arquivo. SEEK CUR – posic¸a˜o do arquivo. SEEK END – fim do arquivo. Exemplo 1 #include <stdio.h> 2 3 int main () 4 { 5 FILE * pFile; 6 pFile = fopen ( "example.txt" , "wb" ); 7 fputs ( "This␣is␣an␣apple." , pFile ); 8 fseek ( pFile , 9 , SEEK_SET ); 9 fputs ( "␣sam" , pFile ); 10 fclose ( pFile ); 11 return 0; 12 } Apo´s execuc¸a˜o o arquivo example.txt conte´m... This is a sample. Outras func¸o˜es u´teis Determina final de arquivo feof() int feof(FILE * stream); Volta cursor para in´ıcio do arquivo rewind() void rewind (FILE * stream); Apaga arquivo remove() int remove (FILE * stream); Descarrega buffer fflush() int fflush (FILE * stream); U¨bersicht 1 Introduc¸a˜o 2 Manipulac¸a˜o de Arquivos em C 3 Exemplos 4 Refere^ncias U¨bersicht 1 Introduc¸a˜o 2 Manipulac¸a˜o de Arquivos em C 3 Exemplos 4 Refere^ncias Refere^ncias DEITEL, H. M., DEITEL, P. J., Como Programar em C. Rio de Janeiro: LTC, 1999. Cap. 11. TENENBAUM, A. M., LANGSAM, Y. AUGESTEIN, M. J. Estruturas de Dados Usando C, Makron Books, 1995. WIRTH, N. Algoritmos e Estruturas de Dados, Prentice Hall, 1996. Introdução Manipulação de Arquivos em C Exemplos Referências
Compartilhar