Sequência de informações binárias armazenadas num dispositivo de armazenamento permanente. Em geral os bits são agrupados em grupos de 8 (1 byte)

Documentos relacionados
Programação para Computação 13ª Aula

13a. Aula Manipulação de arquivos

Algoritmos e Estruturas de Dados II IEC013

LINGUAGEM C: ARQUIVOS

Linguagem C. Armazenamento de Dados em Arquivos - Continuação

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: Manipulação de arquivos

Introdução a Programação. Manipulando Arquivos em Modo Texto

Arquivos. Programação de Computadores I. Natália Batista.

Aula: ARQUIVOS. Introdução à Ciência da Computação I Simone Senger Souza. ICMC/USP São Carlos

Aula 14 Oficina de Programação Tópicos Especiais em C: Arquivos. Profa. Elaine Faria UFU

LINGUAGEM C: ARQUIVOS

Programação de Computadores I Arquivos na Linguagem C PROFESSORA CINTIA CAETANO

Computação Eletrônica. Aula 12 Arquivos Texto e Binário. Prof: Luciano Barbosa. CIn.ufpe.br

Computação 2. Aula 8. Profª. Fabiany Arquivos

Existe uma quantidade de informação que pode ser armazenada para resolver o problema.

Arquivos em C. Material da Prof. Ana Eliza

Arquivos em C Parte 2

Métodos Computacionais. Arquivos

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Arquivos em C

Faculdade de Computação

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

CURSO BÁSICO DE PROGRAMAÇÃO AULA 17. Manipulação de arquivos binários.

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Programação II. Arquivos - Conceito. Arquivos

Departamento de Sistemas de Computação Universidade de São Paulo Introdução a Ciência de Computação I. Aula 13 Arquivos

Computação 2. Aula 9. Diego Addan Arquivos

Programação de Computadores II

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

Manipulação de arquivos

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

Linguagem C: Arquivo-Texto

Depuração e Teste de programas C C Depuração e teste de programas C

Aula 16: Manipulação de Arquivos em C

Structs, Ponteiros e Arquivos. Prof. Maurício Dias

C Arquivos. Adriano Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Computação para Engenharia Ambiental

Linguagem C arquivos. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Manipulação de Arquivos

O que é a modularização

DICA: Preste bastante atenção nas funções de manipulação de arquivos e verás que você já utiliza arquivos desde a primeira aula.

Arquivos em C. Notas de Aula. Prof. Francisco Rapchan

Estruturas de Dados. Módulo 15 - Arquivos. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

1/22 FICHEIROS BINÁRIOS

TÉCNICAS DE PROGRAMAÇÃO

Laboratório de Introdução à Ciência da Computação I

E/S em Arquivo. Para ler ou escrever arquivos é preciso usar ponteiros de arquivo. Um ponteiro de arquivo é uma variável ponteiro do tipo FILE:

Linguagem de Programação

Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

1 Escrita de Arquivos Binário

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Arrays, Criação de Funções, Estruturas e Manipulação de Arquivos.

SSC304 Introdução à Programação Para Engenharias. Arquivos. GE4 Bio

Programação de Computadores

MC-102 Aula 24 Arquivos em C e Parâmetros do Programa

Aula 26 - Arquivos. Prof. Laura Silva de Assis. Engenharia da Computação. CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca

Fundamentos de Programação 1

Aula 26: Arquivos de texto

Arquivos Binários UFOP 1/25

SSC INTRODUÇÃO À COMPUTAÇÃO PARA ENGENHARIA AMBIENTAL REGISTROS E ARQUIVOS. Profa. Dra. Milena Guessi Margarido

9. Arquivos em C. Prof. Renato Tinós. Departamento de Computação e Matemática (FFCLRP/USP) Introdução à Computação II

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

Prof. Neucimar J. Leite. 3 de março de 2007

Manipulação de Arquivos

Ficheiros. IPC2 1999/2000 F. Nunes Ferreira

1/24 FICHEIROS DE TEXTO

Outline. 33. Manipulação de arquivos DIM

1 Arquivos em C. CEFETES Serra - Programação II Mateus Costa Notas de Aula - Arquivos

ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Manipulação de Arquivos. Técnicas de Programação

Programação Estruturada

Linguagem de Programação C. Registros

Linguagem de Programação

Leitura de Arquivos. Prof. Fabrício Olivetti de França

Introdução à Computação II AULA 08 BCC Noturno - EMA896115B

Manipulação de Arquivos

Objetivo. Compreender a definição e dominar a implementação de ponteiros em C. Dominar a manipulação de arquivos

Manipulação de Arquivos

Programação de Computadores I. Linguagem C Arquivos

Aluno: Matrícula: Turma:

Arquivos. Fundamentos de Arquivos. Discos X Memória Principal. Memória Secundária x Principal. Informação mantida em memória secundária (externa)

Arquivos. Estruturas de Dados II Vanessa Braganholo

Introdução a Programação. Arquivos

MC-102 Algoritmos e Programação de Computadores

Programação Computacional Aula 17: Manipulação de arquivos

Linguagem C Ficheiros Compilação Separada

Entrad Entrada / Saíd a / Saída

Computação Eletronica: Arquivos (Introdução)

Aula 16. Ficheiros de texto

Manipulação de Arquivos

Fundamentos de Programação

Alocação Dinâmica de Memória - Exercício

Programação Estruturada Prof. Rodrigo Hausen Entrada e Saída Parte 2

Linguagem C: Introdução

Fundamentos de Arquivos

Operações em Arquivos. MC102 Felipe Bergo

Transcrição:

Arquivos

Apesar da organização física sequencial dos bytes no arquivo, podemos em cima desta organização básica implementar outros tipos de estruturação para uma arquivo Arquivo Sequência de informações binárias armazenadas num dispositivo de armazenamento permanente Em geral os bits são agrupados em grupos de 8 (1 byte)

Trabalhando com arquivos Manipular um arquivo consiste em realizar 3 atividades básicas: Criar / abrir o arquivo Ler / escrever no arquivo fechar o arquivo

Criando / abrindo um arquivo Para criar ou abrir um arquivo já existente no disco, precisamos, primeiro, criar uma variável e associá-la ao arquivo no disco. Esta variável é também chamada de manipulador de arquivo ou identificador de fluxo. Para criar um manipulador de arquivo, usamos o tipo FILE definido na biblioteca stdio.h. Ex: FILE *arq; FILE *arquivoentrada, *arquivosaida;

Criando / abrindo um arquivo Para associar a variável ao arquivo em disco e criar/abrir o arquivo, usamos o comando fopen. FILE *fopen (char *nome_do_arquivo, char *modo_de_acesso); Onde: nome_do_arquivo string com o caminho do arquivo que se deseja abrir/criar. Pode ser usado o caminho completo ( c:/dir1/dir2/nomearquivo.ext ) ou o caminho relativo ( nomearquivo.ext ou../outrodiretorio/nomearquivo.ext ) modo_de_acesso string que determina se o arquivo será criado ou só aberto e quais operações poderão ser executadas no arquivo (só leitura, só gravação etc)

Criando / abrindo um arquivo modo_de_acesso string que determina se o arquivo será criado ou só aberto e quais operações poderão ser executadas no arquivo (só leitura, só gravação etc) Modo Significado r Abre o arquivo somente para leitura. O arquivo deve existir. (O r vem do inglês read, ler) r+ Abre o arquivo para leitura e escrita. O arquivo deve existir. w Abre o arquivo somente para escrita no início do arquivo. Apagará o conteúdo do arquivo se ele já existir, criará um arquivo novo se não existir. (O w vem do inglês write, escrever) w+ Abre o arquivo para escrita e leitura, apagando o conteúdo pré-existente. a Abre o arquivo para escrita no final do arquivo. Não apaga o conteúdo préexistente. (O a vem do inglês append, adicionar, apender) a+ Abre o arquivo para escrita no final do arquivo e leitura.

Criando / abrindo um arquivo Ex: FILE *arq; FILE *arquivoentrada, *arquivosaida; arq = fopen( texto.txt, w ); arquivoentrada = fopen(../dados/dados.dat, r ); arquivosaida = fopen(../dados/dadossaida.dat, r );

Fechando um arquivo Para fechar um arquivo usamos o comando fclose. int fclose (FILE *manipulador_de_arquivo); Ex: fclose(arq); fclose(arquivoentrada); fclose(arquivosaida);

Escrevendo num arquivo Uma vez aberto o arquivo num modo que permita gravação, podemos usar um dos comandos abaixo para realizar esta operação: Comandos Explicação Sintaxe fputc Imprime apenas um caractere. void fputc (int caractere, FILE *fluxo); fputs Imprime uma string diretamente, sem nenhuma formatação. void fputs (char *string, FILE *fluxo); fprintf Imprime uma string formatada. void fprintf (FILE *fluxo, char *formatação,...); fwrite Grava dados binários para um arquivo. int fwrite (void *dados, int tamanho_do_elemento, int num_elementos, FILE *fluxo);

Escrevendo num arquivo - exemplo #include<stdio.h> #include<stdlib.h> #include<conio.h> main(){ char caracter; FILE *arq; arq=fopen("teste.txt","w+"); caracter=getche(); while(caracter!=27){ if(caracter ==13){ printf("\n"); fputc(10, arq); } fputc(caracter, arq); caracter=getche(); } fclose(arq); } Neste programa todos os caracteres digitados pelo usuário são gravados no arquivo teste.txt. O programa termina quando o usuário digita esc que tem valor 27 segundo a tabela ASCII. A organização deste arquivo é sequencial, com um caracter (byte) gravado logo após o anterior.

Lendo de um arquivo Uma vez aberto o arquivo num modo que permita a leitura, podemos usar um dos comandos abaixo para realizar esta operação: Comandos Explicação Sintaxe fgetc Recebe apenas um caractere. int fgetc (FILE *fluxo); fgets Lê uma string (geralmente uma linha inteira). void fgets (char *string, int tamanho, FILE *fluxo); fscanf Recebe uma string formatada. void fscanf (FILE *fluxo, char *formatação,...); fread Lê dados binários de um arquivo. int fread (void *dados, int tamanho_do_elemento, int num_elementos, FILE *fluxo);

Lendo de um arquivo - exemplo #include<stdio.h> #include<stdlib.h> #include<conio.h> main(){ char caracter; FILE *arq; arq=fopen("teste.txt","r"); caracter=fgetc(arq); while(!feof(arq)){ printf("%c", caracter); _sleep(100); caracter=fgetc(arq); } fclose(arq); system("pause"); No programa ao lado todo o arquivo será lido e mostrado na tela, caracter a caracter. A leitura termina quando o fim de arquivo é encontrado. Para testar se o fim de arquivo já foi encontrado, usamos a função feof que retorna verdadeiro quando o fim de arquivo é encontrado e falso caso contrário. }

Uso de registro para organizar um arquivo Podemos organizar um arquivo como uma sequência de registros (structs). Neste caso, uma variável do tipo struct deve ser usada para gravar ou ler os dados do arquivo. Ex: struct tpessoa{ char nome[20]; int idade, mesaniversario; }reg; fwrite(&reg, sizeof(struct tpessoa), 1, arq); A função sizeof devolve o tamanho da estrutura ou variável passada por parâmetro

Uso de registro para organizar um arquivo - Exemplo #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> struct treg{ char nome[30]; int idade, mesaniversario; }; main(){ struct treg reg; FILE *arq; arq=fopen("dados.dat","w+"); printf("nome: "); scanf("%s", reg.nome); while(strcmp(reg.nome, "fim")!=0){ printf("idade: "); scanf("%d", &reg.idade); printf("mes de aniversario: "); scanf("%d", &reg.mesaniversario); fwrite(&reg, sizeof(struct treg), 1, arq); printf("nome: "); No programa ao lado, os dados são recebido pelo teclado e organizados no registro reg. Uma vez preenchidos os campos, os dados são gravados em arquivo um campo após o outro. Cada campo terá sempre o mesmo tamanho para todos os registros do arquivo. Os registros terão, portanto, tamanho fixo. A entrada de dados termina quando o usuário digita fim como nome da pessoa. O arquivo é organizado como uma sequência de registros do tipo treg.

Uso de registro para organizar um arquivo Exemplo 2 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> struct treg{ char nome[30]; int idade, mesaniversario; }; main(){ struct treg reg; FILE *arq; arq=fopen("dados.dat","r"); fread(&reg, sizeof(struct treg), 1, arq); while(!feof(arq)){ printf("nome: %s\n", reg.nome); printf("idade: %d\n", reg.idade); printf("mes de aniversario: %d\n", reg.mesaniversario); _sleep(1000); fread(&reg, sizeof(struct treg), 1, arq); } } fclose(arq); No programa ao lado, os dados são recebido do arquivo no registro reg. O registro reg tem que ser do mesmo tipo do programa anterior, usado para gravar os dados no disco.

Arquivo acesso direto Uma vez que usamos registros de tamanho fixo para organizar o arquivo, podemos contar com o recurso do índice para ir diretamente a uma posição do arquivo. Para tanto devemos multiplicar o índice desejado pelo tamanho da estrutura. O tamanho da estrutura pode ser conseguido usando a função sizeof vista anteriormente. O comando usado para saltar para uma determinada posição é o fseek.

Arquivo acesso direto fseek função que permite posicionarmos o cursor do arquivo num ponto específico do arquivo. int fseek (FILE *fp,long numbytes,int origem); Onde: fp manipulador do arquivo numbytes quantidades de bytes a saltar (se numbytes>0, salta para a direita, senão salta para a esquerda) origem define a partir de que ponto o salto acontecerá. Podem ser usadas as constantes SEEK_SET, SEEK_CUR ou SEEK_END, conforme definido na tabela abaixo: Constante Valor Significado SEEK_SET 0 Início do arquivo SEEK_CUR 1 Ponto corrente no arquivo SEEK_END 2 Fim do arquivo

Arquivo acesso direto - Exemplo #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> struct treg{ char nome[30]; int idade, mesaniversario; }; main(){ struct treg reg; int numreg; FILE *arq; arq=fopen("dados.dat","r"); printf( Digite o numero do registro: ); scanf( %d, &numreg); fseek(arq,numreg*sizeof(struct treg), SEEK_SET); fread(&reg, sizeof(struct treg), 1, arq); printf("nome: %s\n", reg.nome); printf("idade: %d\n", reg.idade); printf("mes de aniversario: %d\n", reg.mesaniversario);

Arquivo Modificando um registro Para alterar o valor de um campo num registro de um arquivo 3 operações devem ser realizads: Leitura do registro. quando o registro é levado do disco à memória principal. Modificação do valor no registro em memória regravação do registro no disco na mesma posição em que se encontrava. Observação: Ao ler o rgistro, o ponteiro do arquivo se posicionará no registro seguinte É necessário reposicionar o ponteiro do arquivo realizando um fseek a partir da posição corrente. Ex: fread(&reg, sizeof(struct treg), 1, arq); reg.idade++; fseek(arq, -1*sizeof(struct treg), SEEK_CUR); fwrite(&reg, sizeof(struct treg), arq);