• Nenhum resultado encontrado

12Arquivos

N/A
N/A
Protected

Academic year: 2021

Share "12Arquivos"

Copied!
26
0
0

Texto

(1)

Linguagem C

Arquivos – Uso de Memória Secundária

Prof. Marcelo R. Zorzan Prof. Moacir P. Ponti Jr.

(2)

Agenda

Uso da memória secundária

Modos de acesso

Modos de abertura de arquivo

Ponteiro de Arquivo

Escrita e leitura por caractere

Escrita e leitura por blocos

(3)

Uso da Memória Secundária

 Em muitos casos necessitamos da memória secundária

(auxiliar), para armazenar informações

 Utilizando discos (HD, disquetes, etc.), podemos utilizar

arquivos para armazenar os dados necessários

Um arquivo é uma coleção de bytes referenciados por

(4)

E/S ANSI vs E/S Unix vs E/S C++

 C ANSI – define conjunto completo de funções de E/S

para ler e escrever qualquer tipo de dado

 C Unix (antigo) – contem dois sistemas distintos de

rotinas para E/S

 C++ suporta todo o sistema de arquivos definido pelo C

ANSI.

• no entanto, C++ também define seu próprio sistema de E/S orientado a objetos

(5)

Streams e Arquivos

 C fornece interface independente do dispositivo real que

é acessado.

• Provê um nível de abstração entre o programador e o dispositivo utilizado

• Esta abstração é chamada de stream • O dispositivo real é chamado de arquivo

(6)

Streams e Arquivos

STREAMS DE TEXTO

• Sequência de caracteres

• Organizada ou não em linhas terminadas por um caractere de nova linha ('\n'), LF, ASCII 10

• É feita conversão e controlado fim de arquivo

STREAMS BINÁRIAS

• Sequência de bytes

• Correspondência de um para um com aqueles encontrados no dispositivo externo

(7)

Streams e Arquivos

ARQUIVOS

• Qualquer coisa, desde um arquivo em disco , um terminal ou uma impressora

• Uma stream é associada com um arquivo específico realizando uma operação de abertura • Uma vez que o arquivo está aberto, informações podem ser trocadas entre ele e o programa

• Nem todos os arquivos apresentam os mesmos

recursos: acesso a disco pode ser aleatório, um teclado não.

(8)

Modos de acesso

 Quatro diferentes modos de acesso são possíveis, sendo

os dados lidos e escritos:

um caractere por vezcomo Strings

como Strings formatadas

em registro ou bloco – grupo de dados de tamanho

fixo usado para armazenar itens similares em sequência (como arrays)‏

(9)

Ponteiro de Arquivo

 Um ponteiro de arquivo é um ponteiro para informações

que definem várias características de um arquivo:

 seu nome, status e posição atual no arquivo.

 Para acessar um arquivo é preciso obter uma variável

ponteiro de arquivo, usando o comando:

(10)

Abrindo um arquivo

 A declaração do ponteiro de arquivo permite relacionar a

esta variável a abertura de um determinado arquivo.

 Para isto é preciso definir:  O nome do arquivo

O tipo de abertura

Onde guardar informações sobre o arquivo

FILE *fp;

fp = fopen("arquivo.txt", "w");

[nome] [tipo] [onde guardar]

(11)

fopen( )‏

A função “fopen” tem duas finalidades:

- abrir uma fila de bytes

- ligar um arquivo em disco àquela fila

FILE *fopen(char *NomeArq, char *modo); FILE *arquivo;

arquivo = fopen("teste", "w")); if ( ( arquivo == NULL ) {

printf("Não posso abrir o Arquivo teste.\n");

exit(1); // força o término da execução da rotina

(12)

Modo

Significado

“r” Abre Arquivo de Texto para Leitura  “w” Cria Arquivo de Texto para Gravação  “a” Anexa a um Arquivo de Texto

“rb” Abre Arquivo Binário para Leitura“wb” Cria Arquivo Binário para Gravação“ab” Anexa a um Arquivo Binário

“r+” Abre Arquivo de Texto para Leitura/Gravação“w+” Cria Arquivo de Texto para Leitura/Gravação

“a+” Abre ou Cria Arquivo de Texto para Leitura/Gravação“r+b” Abre Arquivo Binário para Leitura/Gravação

“w+b” Cria Arquivo Binário para Leitura/Gravação“a+b” Abre ou Cria Arquivo Binário para

(13)

Fechando um arquivo - fclose ( )‏

Fecha as filas abertas.

Caso o programa seja encerrado sem que as filas

sejam fechadas, dados gravados na memória

podem ser perdidos.

int fclose(FILE *fp);

Exemplo:

FILE *arquivo;

arquivo = fopen("teste", "w");

(14)

fputc ( )‏

Grava um caracter em fila previamente aberta

int fputc(int ch, FILE *fp);

ch é o caracter a ser gravado

fp é o ponteiro devolvido por fopen

Exemplo:

FILE *arquivo;

arquivo = fopen("teste.txt", "w"));

(15)

fgetc ( )‏

Lê um caracter em fila previamente aberta

int fgetc(FILE *fp);

fp é o ponteiro devolvido por fopen

Exemplo: FILE *arquivo; arquivo = fopen("teste.txt", "r")); ch = fgetc(arquivo); while (ch != EOF)‏{ ch = fgetc(arquivo); }

(16)

rewind( )‏

Reinicia o arquivo, ou seja, movimenta o

ponteiro do arquivo para seu início.

Exemplo:

FILE *arquivo;

arquivo = fopen("teste", "w")); while (ch != EOF)‏

ch = getc(arquivo); rewind(arquivo);

(17)

Esvaziando stream - fflush( )‏

Esvazia o conteúdo de uma stream de saída,

escrevendo os dados no arquivo.

int fflush(FILE *fp);

- devolve 0 para sucesso ou EOF insucesso

Exemplo:

FILE *arquivo;

arquivo = fopen("teste.txt", "r+"); putc('a', arquivo);

putc('1', arquivo);

if (fflush(arquivo) == 0)‏

(18)

int main(void)‏{

FILE *arq; // declara ponteiro de arquivo

char ch;

if ((arq=fopen("arqtest.txt","w+")) == NULL) { exit(1);

} // tenta criar arquivo

ch = getchar(); // usuario digita caracter

while (ch != '0') {

fputc(ch, arq); // grava ch no arquivo

ch = getchar(); // usuario digita caracter

}

fflush(arq); // esvazia stream

rewind(arq); // volta ponteiro para inicio do arquivo

while ((ch = fgetc(arq))!=EOF) {

printf("%c", ch); // imprime caracter lido

}

fclose(arq); // fecha arquivo

}

(19)

fwrite( ) e fread( )‏

Permitem o uso de blocos de daos

leitura – fread()

escrita – fwrite()‏

int fread(void *mem, int n_bytes, int cont, FILE *fp);

(20)

fwrite( )

Exemplo fwrite():

FILE *arquivo; arquivo = fopen("teste.dat","wb+"); int valor = 900; int idade = 20; float salario = 1500.99;

fwrite(&valor, sizeof(int), 1, arquivo);

fwrite(&salario, sizeof(float), 1, arquivo); fwrite(&idade, sizeof(int), 1, arquivo);

(21)

fread( )‏

Exemplo fread():

FILE *arq; arq = fopen("teste.dat","rb"); int valor_2; int idade_2; float salario_2;

fread(&valor_2, sizeof(int), 1, arq);

fread(&salario_2, sizeof(float), 1, arq); fread(&idade_2, sizeof(int), 1, arq);

(22)

Exemplo - fwrite ( )

int main(void) { FILE *fp;

float f = 12.23; int a = 1099;

if ((fp=fopen("teste","wb+")) == NULL) {

printf("Arquivo não pode ser criado\n"); exit(1);

}

fwrite(&f, sizeof(float), 1, fp);

fwrite(&a, sizeof(int), 1, fp);

fclose(fp); }

(23)

Exemplo - fread ( )

int main(void) { FILE *fp;

float x; int j;

if ((fp=fopen("teste","r+b")) == NULL) {

printf("Arquivo não pode ser aberto\n"); exit(1);

}

fread(&x, sizeof(float), 1, fp);

fread(&j, sizeof(int), 1, fp);

printf("%.3f %d", x, j); fclose(fp);

(24)

Exemplo – registro (parte 1)‏

#include <stdio.h> #include <stdlib.h> #define MAX 100

typedef struct cli { char nome[30];

int idade; } CLIENTE;

int main(void) {

FILE *fp;

CLIENTE pc_escrita[MAX], pc_leitura[MAX];; int i;

(25)

Exemplo – registro (parte 2)‏

fp=fopen("teste.dat","w+b"); // tenta abrir/criar

for (i=0; i<MAX; i++) {

// Pede ao usuário que digite informacoes

printf("(%d) Nome: ", i+1); __fpurge(stdin);

fgets(pc_escrita[i].nome, 30, stdin); printf("Idade: ");

__fpurge(stdin);

scanf("%d", &pc_escrita[i].idade );

// Escreve registro no arquivo

printf("Escrevendo no arquivo...\n");

fwrite(&pc_escrita[i], sizeof(CLIENTE), 1, fp);

}

(26)

Exemplo – registro (parte 3)‏

fflush(fp); // esvaziando stream

rewind(fp); // rebobinando arquivo para leitura for (i=0; i<MAX; i++) {

// Le registro do arquivo

fread(&pc_leitura[i], sizeof(CLIENTE), 1, fp);

// Escreve na tela registro lido printf("(%d)\n", i+1); printf("Nome: %s", pc_leitura[i].nome); printf("Idade: %d", pc_leitura[i].idade); } fclose(fp); }

Referências

Documentos relacionados

da Lei Orgânica Municipal, ANDERSON DE AZEVEDO ANDRADE, para exercer o cargo em comissão de Assessor Especial de Serviço, símbolo DAS-8, na Secretaria Municipal de Saúde.

O método stepwise diz respeito à forma como as possíveis variáveis explicativas são testadas na modelagem pesquisada pela análise de regressão linear, isto é, ele

Com a ajuda de um amigo polonês, Yorke compreendeu que Sharkovskii queria lhe dizer que seu resultado era apenas um pequeno corolário do teorema que ele já havia provado mais de

O segundo Beneficiário será designado pelo Segurado na Proposta de Adesão, podendo ser substituído a qualquer tempo, mediante solicitação formal assinada pelo próprio Segurado, para

Dentre eles destaca-se o projeto Litoral do Paraná – Emoções o Ano Inteiro, que conta com o apoio de diversas instituições privadas e públicas, municipais e estaduais, além

Neste trabalho objetivou-se avaliar os resultados das análises da Contagem Bacteriana Total em amostras de leite cru refrigerado coletadas de tanques

Esses reis pareciam totalmente destituídos de arrependimento por seus atos, mesmo quando se tornou cada vez mais claro que eram seus atos que estavam trazendo as calamidades que

Pacientes em hemodiálise (clearance de creatinina menor que 7 mL/min), após a administração de uma dose oral única de 10 mg de cetirizina, tiveram um aumento de 3 vezes na meia vida