Manipulação de Arquivos em C

12
Manipulação de Arquivos em C

description

Manipulação de Arquivos em C. Arquivos. Tipos de arquivo: Sequencial (texto) Caracteres armazenadas sequencialmente. É possível determinar o primeiro, segundo terceiro .. caracteres que compõem o arquivo Binário Formado por uma seqüência de bytes sem correspondência com um tipo de dado. - PowerPoint PPT Presentation

Transcript of Manipulação de Arquivos em C

Page 1: Manipulação de Arquivos  em C

Manipulação de Arquivos em C

Page 2: Manipulação de Arquivos  em C

ArquivosTipos de arquivo:

– Sequencial (texto)• Caracteres armazenadas

sequencialmente. • É possível determinar o

primeiro, segundo terceiro .. caracteres que compõem o arquivo

– Binário• Formado por uma seqüência

de bytes sem correspondência com um tipo de dado.

• Cabe ao programador fazer esta correspondência quando le e escreve estes arquivos.

Page 3: Manipulação de Arquivos  em C

Descritor de Arquivos• Descritor de arquivo:

– Em C: Estrutura de dados denominada FILE

– Armazena informações sobre o arquivo em memória secundária (arquivo físico).

– O arquivo lógico e armazenado em variáveis de memória definidas pelo programador.

– Criando um descritor:FILE *parquivo;

Arquivo “lógico”em memória

Descritor de Arquivo (FILE)Arquivo

“Físico”

Memória secundária

Memória primária

Page 4: Manipulação de Arquivos  em C

Abrindo e Fechando Arquivos

• Abrir um arquivo: função fopen(..)– Associar um descritor a um arquivo físico: FILE *parquivo;char *nome = "texto.txt";if (( parquivo = fopen(nome, "w+b")) == NULL) {

printf("\n\nNao foi possivel abrir o arquivo para escrita.\n");

exit(1); }

Page 5: Manipulação de Arquivos  em C

Abrindo e Fechando ArquivosFILE *pa Fopen (nome_do_arquivo_físico,

modo_de_abertura)• Modos de abertura:

r Abre um arquivo texto para leitura

w Cria um arquivo texto para escrita

a Adiciona texto ao fim de um arquivo texto

rb Abre um arquivo binário para leitura

wb Abre um arquivo binário para escrita

ab Anexa a um arquivo binário

[r+, w+, a+ ]+ b O + inclui escrita ou leitura nos modos e o + b define como binário

Page 6: Manipulação de Arquivos  em C

Abrindo e Fechando Arquivos

• Fechando um arquivo: função fclose(..)– Quando um programa não precisa mais utilizar um

arquivo por um período de tempo longo, o arquivo pode ser fechado

– Fechar um arquivo protege os seus dados, garante que atualizações feitas serão salvas e libera o arquivo para outros usuários ou programas poderem utiliza-lo.

fclose(parquivo);

Page 7: Manipulação de Arquivos  em C

Lendo dados em um arquivo sequencial

• Quando o arquivo é aberto, a posição corrente (mantida internamente pelo sistema) é o início do arquivo.

• A cada operação executada sobre o arquivo, essa posição é atualizada.• A função int ftell(FILE *pa)retorna a posição corrente no arquivo• A função feof retorna um valor verdadeiro (inteiro diferente de 0) se a posição

corrente para o arquivo indicado é o final do arquivo, ou falso (inteiro igual a 0) em caso contrário.

• A rotina C para obter um caráter de um arquivo é fgetc: – int fgetc(FILE *stream); – O valor de retorno de fgetc é um inteiro, que pode conter o

código ASCII do caráter ou o valor EOF (definido em stdio.h), que indica o final do arquivo ou a ocorrência de alguma condição de erro.

• A função rewind() recoloca o indicador de posição de arquivo no inicio do arquivo.

Page 8: Manipulação de Arquivos  em C

Exemplovoid exemplo3 (){FILE *parquivo;char *nome = "texto.txt";char ch;if (( parquivo = fopen(nome, "r")) == NULL) { printf("\n\nNao foi possivel abrir o arquivo para escrita.\

n"); exit(1);} while (feof(parquivo)== FALSE) { ch = fgetc(parquivo); putchar(ch); }rewind(parquivo);}

Page 9: Manipulação de Arquivos  em C

fscanf e fprintf

• fprintf() e fscanf() são semelhantes a printf() e scanf().

Adiciona-se um parâmetro descritor de arquivo nestas funções para determinar o arquivo de onde se está lendo ou escrevendo.

Page 10: Manipulação de Arquivos  em C

fscanf// Lendo caracteres:void exemplo4() {FILE *parquivo;char *nome = "texto.txt";char ch;if (( parquivo = fopen(nome, "r")) == NULL) { printf("\n\nNao foi possivel abrir o arquivo para

escrita.\n"); exit(1);} while (feof(parquivo)== FALSE) { fscanf (parquivo, "%c", &ch); putchar(ch); }}

Page 11: Manipulação de Arquivos  em C

fscanf//Lendo números inteirosvoid exemplo5() {FILE *parquivo;char *nome = "numeros.txt";int n;if (( parquivo = fopen(nome, "r")) == NULL) { printf("\n\nNao foi possivel abrir o arquivo para

escrita.\n"); exit(1);} while (feof(parquivo)== FALSE) { fscanf (parquivo, "%d", &n); printf("%d ", n); }}

Page 12: Manipulação de Arquivos  em C

fprintfvoid exemplo6() {FILE *parquivo;int i=10;char *nome = "numeros.txt";int n;if (( parquivo = fopen(nome, "a+")) == NULL) { printf("\n\nNao foi possivel abrir o arquivo.\n"); exit(1);} while (i++<20) { fprintf(parquivo, "%d ", i); } rewind(parquivo);

while (feof(parquivo)== FALSE) { fscanf (parquivo, "%d", &n); printf("%d ", n); }}