120 likes | 236 Views
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.
E N D
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. • Cabe ao programador fazer esta correspondência quando le e escreve estes 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; Descritor de Arquivos Memória primária Memória secundária Descritor de Arquivo (FILE) Arquivo “Físico” Arquivo “lógico” em memória
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); } Abrindo e Fechando Arquivos
Abrindo e Fechando Arquivos FILE *pa Fopen (nome_do_arquivo_físico, modo_de_abertura) • Modos de abertura:
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);
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.
Exemplo void 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); }
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.
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); } }
fscanf //Lendo números inteiros void 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); } }
fprintf void 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); } }