Manipulação de Arquivos
|
|
|
- Edite Caiado Galindo
- 9 Há anos
- Visualizações:
Transcrição
1 Manipulação de Arquivos Devemos iniciar nossa explanação pelo conceito de arquivo: Arquivo é uma unidade lógica utilizada para armazenar dados em disco ou em qualquer outro dispositivo externo de armazenamento. Pode-se abrir, fechar, ler, escrever ou apagar um arquivo. A linguagem C manipula tanto arquivos quanto dispositivos de I/O, se utilizando do conceito de ponteiro para arquivo. Sendo disponibilizada uma série de funções para trabalhar com este conceito, cujos protótipos estão reunidos em stdio.h. 493
2 Manipulação de Arquivos A definição do ponteiro para arquivo também está no arquivo stdio.h. Podemos declarar um ponteiro para arquivo da seguinte maneira: FILE *p; Os arquivos podem ser classificados em: - binários; - texto. 494
3 Manipulação de Arquivos - fopen() Esta é a função de abertura de arquivos. Seu protótipo é: FILE *fopen (char *nome_do_arquivo,char *modo); 495
4 496
5 Manipulação de Arquivos Poderíamos então, para abrir um arquivo binário para escrita, escrever:... FILE *fp; fp=fopen ("exemplo.bin","wb"); if (!fp) printf ("Erro na abertura do arquivo."); A condição!fp testa se o arquivo foi aberto com sucesso, porque no caso de um erro a função fopen() retorna um ponteiro nulo (NULL). 497
6 Manipulação de Arquivos Uma vez aberto um arquivo, vamos poder ler ou escrever nele utilizando as funções que serão apresentadas a seguir. Toda vez que estamos trabalhando com arquivos, há uma espécie de posição atual no arquivo. Esta é a posição de onde será lido ou escrito o próximo dado. Normalmente, num acesso sequencial a um arquivo, não temos que mexer nesta posição. Pois, quando lemos um dado a posição no arquivo é automaticamente atualizada. Num acesso randômico teremos que mexer nesta posição. 498
7 Manipulação de Arquivos - fclose Quando acabamos de usar um arquivo que abrimos, devemos fechá-lo. Para tanto, usa-se a função fclose(), cujo protótipo é: int fclose (FILE *fp); O ponteiro fp passado à função fclose() determina o arquivo a ser fechado. A função retorna zero no caso de sucesso. 499
8 Manipulação de Arquivos Fechar um arquivo faz com que qualquer dado que tenha permanecido no "buffer" associado ao fluxo de saída seja gravado. A função exit() fecha todos os arquivos que um programa tiver aberto. 500
9 Manipulação de Arquivos - putc A função putc é a primeira função de escrita em arquivo que veremos. Seu protótipo é: int putc (int ch, FILE *fp); 501 A referida função escreve um caractere no arquivo apontado por fp. O que putc() retorna? e para que é útil este retorno?
10 #include <stdio.h> /*Exemplo*/ int main() { FILE *fp; char c; fp = fopen("arquivo.txt","w"); if(!fp) { printf( "Erro na abertura do arquivo"); exit(1); } printf("entre com um caractere para ser gravado no arquivo: "); scanf("%c", &c); putc(c, fp); fclose(fp); return 0; } 502
11 #include <stdio.h> /*Exemplo*/ int main() { FILE *fp; char c; fp = fopen("arquivo.txt","w"); if(!fp) { printf( "Erro na abertura do arquivo"); exit(1); } printf("entre com um caractere para ser gravado no arquivo: "); scanf("%c", &c); if (c == (char) putc(c, fp)) printf("tudo deu certo!"); else prinff("ocorreu um erro!"); fclose(fp); return 0; } 503
12 Manipulação de Arquivos Exercício: Com o que vimos até o momento sobre manipulação de arquivos. Construa uma função em C que possua a capacidade de escrever uma string em um arquivo texto. Escreva um programa que se utiliza adequadamente da função que você implementou. 504
13 505 #include <stdio.h> void putstrinfile (FILE *, char*); int main() { FILE *fp; char string[100]; int i; fp = fopen("arquivo.txt","w"); if(!fp) } { printf( "Erro na abertura do arquivo"); exit(1); } printf("entre com a string a ser gravada no arquivo:"); scanf("%[^\n]", string); putstrinfile (fp, string) ; fclose(fp); return 0;
14 506 void putstrinfile (FILE *fp, char* string) { int i; for(i=0; string[i]; i++) putc(string[i], fp); }
15 - getc Manipulação de Arquivos Seu protótipo é: int getc (FILE *fp); A função retorna um caractere lido do arquivo apontado por fp. OBS.: Equivalente à fgetc(). Exercício: Construa um função em C que possua a capacidade de ler e apresentar na saída padrão uma string contida em um arquivo texto. 507
16 508 - feof Manipulação de Arquivos EOF ("End Of File") indica o fim de um arquivo. Às vezes, é necessário verificar se um arquivo chegou ao fim. Para isto podemos usar a função feof(). Ela retorna não-zero se o arquivo chegou ao EOF, caso contrário retorna zero. Seu protótipo é: int feof (FILE *fp); Outra forma de se verificar se o final do arquivo foi atingido é comparar o caractere lido por getc() com EOF. O programa a seguir abre um arquivo já existente e o lê, caractere por caractere, até que o final do arquivo seja atingido. Os caracteres lidos são apresentados na tela:
17 509 #include <stdio.h> int main() { FILE *fp; int c; fp = fopen("arquivo.txt","r"); if(!fp) { } printf( "Erro na abertura do arquivo"); exit(1); } while((c = getc(fp) )!= EOF) printf("%c", (char)c); fclose(fp); return 0;
18 510 #include <stdio.h> int main() { FILE *fp; fp = fopen("arquivo.txt","r"); if(!fp) { printf( "Erro na abertura do arquivo"); exit(1); } while(!feof(fp)) printf("%c", (char)getc(fp)); fclose(fp); return 0; }
19 /*Resposta de exercício do slide 512*/ void get_string(file *fp) { int c; while ((c = getc(fp))!= EOF) printf("%c", (char)c); } 511
20 Manipulação de Arquivos - Arquivos pré-definidos Quando se começa a execução de um programa, o sistema automaticamente abre alguns arquivos pré-definidos: stdin: dispositivo de entrada padrão (geralmente o teclado); stdout: dispositivo de saída padrão (geralmente o vídeo); stderr: dispositivo de saída de erro padrão (geralmente o vídeo); stdaux: dispositivo de saída auxiliar (em muitos sistemas, associado à porta serial); stdprn : dispositivo de impressão padrão (em muitos sistemas, associado à porta paralela). 512
21 513 Manipulação de Arquivos Cada uma destas constantes pode ser utilizada como um ponteiro para FILE, para acessar os periféricos associados a eles. Desta maneira, pode-se, por exemplo, usar: char ch = (char)getc(stdin); para efetuar a leitura de um caractere a partir do teclado, ou: putc(ch, stdout); para imprimir o mesmo no monitor.
22 514 Manipulação de Arquivos Com base no que vimos, podemos agora entender melhor o processo de leitura de valores fornecidos través da entrada padrão. Sempre que nos utilizamos de uma função para leitura de valores através do teclado, estamos solicitando que seja efetuada uma leitura na stream (buffer) que representa o arquivo apontado por stdin. Quando não é encontrado algo na stream ocorre uma espera pelo fornecimento de valores através do teclado, ou melhor, ocorre uma espera por pressionamento(s) de tecla(s) no teclado.
23 Exercício: Manipulação de Arquivos Com base no que foi discutido, podemos construir um programa que leia uma string fornecida pelo usuário, através da entrada padrão, e a retorne na saída padrão. O comprimento máximo da string é de vinte caracteres válidos. A identificação do final da string é caracterizada pelo pressionamento da tecla enter ou ao se atingir o limite de caracteres válidos. 515
24 - fgets Manipulação de Arquivos Para se ler uma string num arquivo podemos usar fgets() cujo protótipo é: char *fgets (char *str, int tamanho,file *fp); A função lê a string até que um caractere de nova linha seja lido ou tamanho-1 caracteres tenham sido lidos. Se o caractere de nova linha ('\n') for lido, ele fará parte da string, o que não acontecia com gets. A string resultante sempre terminará com '\0' (por isto somente tamanho-1 caracteres, no máximo, serão lidos). 517
25 Manipulação de Arquivos A função fgets é semelhante à função gets(), porém, além dela poder fazer a leitura a partir de um arquivo de dados e incluir o caracter de nova linha na string, ela ainda especifica o tamanho máximo da string de entrada. Como vimos, a função gets() não tinha este controle, o que poderia acarretar erros de "estouro de buffer". Portanto, levando em conta que o ponteiro fp pode ser substituído por stdin, como vimos anteriormente, uma alternativa ao uso de gets é usar a seguinte construção: int tamanho=11; char str[11]; fgets (str, tamanho, stdin); 518
26 Exercício: Manipulação de Arquivos Construa um programa em C que receba o nome de um arquivo, fornecido pelo usuário, através da entrada padrão, e efetue a abertura do mesmo para uma leitura. O nome do arquivo fornecido deve possuir no máximo 20 caracteres. 519
27 Manipulação de Arquivos - fputs A função fputs() escreve uma string num arquivo. Seu protótipo é: char *fputs (char *str, FILE *fp); 521
28 - fflush Seu protótipo é: Manipulação de Arquivos int fflush (FILE *fp); A função fflush() esvazia o buffer do arquivo referenciado pelo ponteiro passado como argumento, se o arquivo passado for um arquivo de saída o conteúdo do buffer é gravado no mesmo. Se a função for chamada sem parâmetros, os buffers de todos os arquivos abertos para saída serão descarregados. A função devolve 0 para indicar sucesso, caso contrário devolve EOF. 522
29 Manipulação de Arquivos - ferror A função ferror() determina se uma operação com arquivo produziu um erro. Seu protótipo é: int ferror (FILE *fp); A função ferror() retorna um inteiro não nulo se ocorreu um erro durante a última operação no arquivo; caso contrário retorna zero. 523
30 524 /* Exemplo da utilização da função ferror() */ #include <stdio.h> int main() { FILE *pf; char string[100]; if(!(pf = fopen("arquivo.txt","wb"))) exit(1); do { printf("\ndigite uma nova string. Para terminar, digite <enter>: "); fgets(string,100,stdin); fputs(string, pf); if(ferror(pf)) exit(1); } while (strlen(string) > 1); fclose(pf); return 0; }
31 525 Exercício: Manipulação de Arquivos Construa um programa em C que receba da linha de comando, com a qual o programa foi executado, o nome de um arquivo texto existente, o qual deve ser analisado, afim de se determinar quantas linhas o mesmo tem, após a referida analise, o programa deve incluir uma nova linha no final do arquivo contendo o número de linhas que o mesmo possuía. Caso ocorra algum erro durante o processamento, o mesmo deve ser identificado através da exibição de uma mensagem na saída padrão. Observação o número máximo de caracteres que cada linha contém é 80.
32 528 Podemos escrever e ler blocos de dados em um determinado arquivo. Para tanto, a linguagem C, disponibiliza as funções fread() e fwrite(). - fread Manipulação de Arquivos O protótipo de fread() é: unsigned int fread (void *buffer, int numero_de_bytes, int count, FILE *fp); A função retorna o número de unidades efetivamente lidas. Este número pode ser menor que count quando o fim do arquivo for encontrado ou ocorrer algum erro.
33 - fwrite Manipulação de Arquivos A função fwrite() funciona como fread(), porém escrevendo no arquivo. Seu protótipo é: unsigned int fwrite(void *buffer, int numero_de_bytes, int count, FILE *fp); A função retorna o número de itens escritos. Este valor será igual a count, a menos que ocorra algum erro. O exemplo a seguir ilustra o uso de fwrite() e fread() para gravar e posteriormente ler uma variável float em um arquivo binário. 529
34 530 #include <stdio.h> int main() { FILE *pf; float pi = , pilido; if(!(pf = fopen("arquivo.bin", "wb"))) exit(1); if(fwrite(&pi, sizeof(float), 1,pf)!= 1) { printf("erro na escrita do arquivo!"); exit(2); } fclose(pf); if(!(pf = fopen("arquivo.bin", "rb"))) exit(1); if(fread(&pilido, sizeof(float), 1,pf)!= 1) { printf("erro na leitura do arquivo!"); exit(3); } printf("\no valor de PI, lido do arquivo e': %.4f", pilido); fclose(pf); return(0); }
35 Exercício: Manipulação de Arquivos Construa funções na linguagem C que manipulem um determinado arquivo que contém registros, efetuando operações de escrita e leitura respectivamente. Um registro contém código, nome e salário de um funcionário especifico. Uma função deve escrever e a outra ler um determinado registro no arquivo especificado. 531
36 Manipulação de Arquivos - fseek Para se fazer procuras e acessos randômicos em arquivos usa-se a função fseek(). Esta move a posição corrente de leitura ou escrita no arquivo de um valor especificado, a partir de um ponto especificado. Seu protótipo é: int fseek (FILE *fp, long int numbytes, int origem); 533
37 Exercício: Manipulação de Arquivos Com base no exercício do slide 460, construa mais uma função, capaz de inserir um determinado registro em uma determinada posição em um arquivo. Observação: A função deve receber o nome do arquivo a ser manipulado e o número de registros contido no mesmo entre os seus parâmetros. 534
38 Manipulação de Arquivos rewind A função rewind() de protótipo void rewind (FILE *fp); retorna a posição corrente do arquivo para o início. - remove Protótipo: int remove (char *nome_do_arquivo); Apaga um arquivo especificado, retornando zero caso seja bem sucedida; caso contrário, retorna um não nulo.
39 Manipulação de Arquivos Exercício: Com o que vimos até o momento sobre manipulação de arquivos. Construa um programa na linguagem C que, utilizando-se da função definida no exercício do slide 504, possua a capacidade de escrever strings em um arquivo texto denominado arquivo.txt. O programa receberá uma sequência de strings, através da entrada padrão, as escrevendo no arquivo, uma string em cada linha. O programa ao receber uma string vazia finaliza sua execução. 537
40 Alocação Dinâmica de Memória - Exercício Exemplo de entrada: Marcelo Linder Um otimo professor Estudem Exemplo de Saída na tela: Conteúdo do arquivo denominado arquivo.txt após execução do programa: Marcelo Linder Um otimo professor Estudem 538
41 539 void putstrinfile (FILE *fp, char* string) { int i; for(i=0; string[i]; i++) putc(string[i], fp); }
Alocação Dinâmica de Memória - Exercício Escreva um programa em C que manipule um vetor de inteiros não nulos alocado dinamicamente.
1 Alocação Dinâmica de Memória - Exercício Escreva um programa em C que manipule um vetor de inteiros não nulos alocado dinamicamente. O programa recebe inteiros, através da entrada padrão, e os insere
Arquivos em C Parte 2
Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Arquivos em C Parte 2 Profa Rosana Braga Material preparado pela profa Silvana Maria Affonso de Lara 1º semestre de
Alocação Dinâmica de Memória - Exercício
Alocação Dinâmica de Memória - Exercício Construa um programa que leia da entrada padrão o número de linhas e de colunas de uma matriz de floats, aloque espaço dinamicamente para esta e a inicialize, com
LINGUAGEM C: ARQUIVOS
LINGUAGEM C: ARQUIVOS Prof. André Backes ARQUIVOS Por que usar arquivos? Permitem armazenar grande quantidade de informação; Persistência dos dados (disco); Acesso aos dados poder ser não seqüencial; Acesso
LINGUAGEM C: ARQUIVOS
LINGUAGEM C: ARQUIVOS Prof. André Backes Arquivos 2 Por que usar arquivos? Permitem armazenar grande quantidade de informação; Persistência dos dados (disco); Acesso aos dados poder ser não seqüencial;
Aula 16: Manipulação de Arquivos em C
Aula 16: Manipulação de Arquivos em C Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Manipulação de Arquivos Programação de Computadores IV 1 / 33
Computação 2. Aula 8. Profª. Fabiany Arquivos
Computação 2 Aula 8 Arquivos Profª. Fabiany [email protected] E/S com Arquivos A linguagem C não possui nenhum comando de E/S. Todas as operações de E/S ocorrem mediante chamadas a funções de biblioteca
Depuração e Teste de programas C C Depuração e teste de programas C
Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Depuração e Teste de programas C C Depuração e teste de programas C Profa Rosana Braga (adaptado de material do prof.
Existe uma quantidade de informação que pode ser armazenada para resolver o problema.
Arquivos Introdução As estruturas vistas anteriormente armazenam as informações na memória principal do computador. Nem sempre é conveniente. Problemas: A informação é perdida; As estruturas de dados são
Aula: ARQUIVOS. Introdução à Ciência da Computação I Simone Senger Souza. ICMC/USP São Carlos
Aula: ARQUIVOS Introdução à Ciência da Computação I Simone Senger Souza ICMC/USP São Carlos Introdução As estruturas vistas anteriormente armazenam as informações na memória principal do computador. Nem
CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:
CAP. IX - MANIPULAÇÃO DE ARQUIVOS 9.1 Generalidades sobre arquivos 9.2 Abertura e fechamento de arquivos 9.3 Arquivos textos e arquivos binários 9.4 Leitura e escrita em arquivos binários 9.5 Procura direta
Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria
USP - ICMC - SSC SSC 0501-1o. Semestre 2015 Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria Prof. Fernando Santos Osório Email: fosorio [at] icmc. usp. br, gmail. com Página Pessoal: http://www.icmc.usp.br/~fosorio/
Linguagem C. Armazenamento de Dados em Arquivos - Continuação
Linguagem C Armazenamento de Dados em Arquivos - Continuação Arquivos Binários Comandos para gravação e leitura de arquivos (revisão): FILE *arquivo; arquivo = fopen( nome, modo ); fwrite (&variavel, sizeof
Computação Eletrônica. Aula 12 Arquivos Texto e Binário. Prof: Luciano Barbosa. CIn.ufpe.br
Computação Eletrônica Aula 12 Arquivos Texto e Binário Prof: Luciano Barbosa Relembrando a Arquitetura Básica de um Computador Até agora, toda a informação armazenada por nossos programas estava na memória
LINGUAGEM C: ARRAYS DE CARACTERES: STRINGS
LINGUAGEM C: ARRAYS DE CARACTERES: STRINGS Prof. André Backes DEFINIÇÃO String Sequência de caracteres adjacentes na memória. Essa sequência de caracteres, que pode ser uma palavra ou frase Em outras palavras,
Sumário. Ficheiros. Ficheiros
Sumário Ficheiros Motivação Operações Ficheiros de texto e binários Manipulação de ficheiros de texto Abertura Encerramento Descritores de ficheiros: stdin, stdout, stderr Escrita Leitura Outras funções
Métodos Computacionais. Arquivos
Métodos Computacionais Arquivos Arquivos Um arquivo representa um elemento de informação armazenado em memória secundária (disco) Características: Informações são persistidas Atribui-se nomes aos elementos
Questão 1. Nome para o arquivo fonte questao1.c
Questão 1 Nome para o arquivo fonte questao1.c Construa um programa, na linguagem de programação C, que receba através da entrada padrão um número natural, o qual indicará quantas operações de divisão
Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre
Programação MEAer e LEE Bertinho Andrade da Costa 2010/2011 1º Semestre Instituto Superior Técnico Manipulação de ficheiros de texto Programação 2010/2011 IST-DEEC Manipulação de Ficheiros 1 Sumário Ficheiros
Linguagem C: Arquivo-Texto
Prof. Paulo R. S. L. Coelho [email protected] Faculdade de Computação Universidade Federal de Uberlândia GEQ007 Organização 1 Introdução em C 2 3 Organização Introdução em C 1 Introdução em C 2 3 Introdução
Linguagem de Programação C. Arquivos
Arquivos Cristiano Lehrer Introdução Em C um arquivo é apenas um conjunto de bytes colocados uns após os outros de forma sequencial: Utilização de arquivos: Fonte de dados para o programa: Trata-se de
Estruturas de Dados. Módulo 15 - Arquivos. 2/6/2005 (c) Dept. Informática - PUC-Rio 1
Estruturas de Dados Módulo 15 - Arquivos 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)
Manipulação de Arquivos
Manipulação de Arquivos Estrutura de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM Tipo
Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza
Introdução Manipulação de arquivos em C Estrutura de Dados II Prof Jairo Francisco de Souza Manipulação de Arquivo em C Existem dois tipos possíveis de acesso a arquivos na linguagem C : sequencial (lendo
Linguagem C arquivos. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná
Linguagem C arquivos IF61A/IF71A - Computação 1 Prof. Leonelo Almeida Universidade Tecnológica Federal do Paraná Até agora... Introdução à linguagem C... Vetores Matrizes Funções Recursão Registros Ponteiros
Aula de Arquivos. Jesimar da Silva Arantes. Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos, SP
Aula de Arquivos Jesimar da Silva Arantes Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos, SP Estagiário PAE: Jesimar da Silva Arantes Professor: Claudio Fabiano
3.1 - Funções para manipular dados de entrada e saída padrão
1616161616161616161616161616161616161616161616161616 3- ENTRADA E SAÍDA EM C Os principais meios para executar operações de entrada e saída (E/S) são: Entrada e saída pelo console (ou padrão): teclado
Arquivos em C. Notas de Aula. Prof. Francisco Rapchan
Arquivos em C Notas de Aula Prof. Francisco Rapchan www.geocities.com/chicorapchan Há várias definições para arquivos em computação. Uma das mais usadas é a de que um arquivo é um conjunto de registros
Structs, Ponteiros e Arquivos. Prof. Maurício Dias
Structs, Ponteiros e Arquivos Prof. Maurício Dias Registros e structs Um registro (= record) é uma coleção de várias variáveis, possivelmente de tipos diferentes. Na linguagem C, registros são conhecidos
INF1005: Programação 1. Arquivos. 02/05/10 (c) Paula Rodrigues 1
INF1005: Programação 1 Arquivos 02/05/10 (c) Paula Rodrigues 1 Tópicos Principais Motivação Abertura e fechamento de arquivos Leitura com fscanf Escrita com fprintf 08/03/10 (c) Paula Rodrigues 2 Motivação
Cláudio C. Rodrigues Faculdade da Computação - UFU
Cláudio C. Rodrigues Faculdade da Computação - UFU LINGUAGEM C 07: ARQUIVOS Trabalhando com arquivos O sistema de entrada e saída do ANSI C é composto por uma série de funções cujos protótipos estão reunidos
Linguagem C Ficheiros Compilação Separada
Linguagem C Ficheiros Compilação Separada typedef definição de tipos Apontadores para estruturas Ficheiros na bibiloteca standard do C Compilação Separada Definição de novos tipos em C É possível definir
ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
ARQUIVOS Vanessa Braganholo Estruturas de Dados e Seus Algoritmos ARQUIVO Arquivo é um conjunto de dados, dispostos de forma sequencial Arquivo Programa INSTITUTO DE COMPUTAÇÃO - UFF 2 STREAM Leitura e
INF 1620 P3-02/07/02 Questão 1 Nome:
INF 1620 P3-02/07/02 Questão 1 Considere um arquivo texto que contém os nomes e as notas dos alunos de uma disciplina. As informações de cada aluno ocupam duas linhas do arquivo: a primeira linha contém
