aula 10 arquivos - cin.ufpe.brgrac/ip/aula11 - arquivos.pdf · exemplo: file *arquivo; arquivo =...

36
Aula 10 Arquivos Prof. Gustavo Callou [email protected] [email protected]

Upload: others

Post on 23-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 2: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Características

Podemos armazenar grande quantidade de

informação em arquivos;

Os dados serão gravados em disco.

Page 3: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Tipos de Arquivos

Texto:

Os dados são armazenados em forma de caracteres que

podem ser visualizados ou modificados por um editor de

texto qualquer;

A leitura é feita sequencialmente, do início ao fim.

Binário:

Os dados são armazenados em forma de bits;

O acesso é randômico;

Exemplo: Arquivos executáveis, compactados, etc..

Page 4: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

Sequência de Passos:

1. Criar um ponteiro para a estrutura FILE (definida em

stdio.h);

2. Abrir o arquivo;

3. Ler ou gravar dados no arquivo;

4. Fechar o arquivo.

Page 5: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Criar um ponteiro para um arquivo

Tipo de dado para manipulação de arquivos

FILE * arquivo;

Ponteiro que será utilizado na manipulação/acesso do

arquivo;

Page 6: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Abrindo um arquivo

fopen()

Função utilizada para abrir um arquivo;

FILE *fopen(char nomeDoArquivo[], modoAbertura);

Exemplo:

FILE *arquivo;

arquivo = fopen(“arquivo.txt”, “w”);

Page 7: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Modos de AberturaModo Significado

“r” Abre um arquivo texto para leitura. O arquivo deve existir antes de ser

aberto

“w” Cria um arquivo texto para gravação. Se o arquivo não existir ele será

criado. Se já existir, o conteúdo anterior será destruído.

“a” Abre um arquivo texto para gravação. Os dados serão adicionados no

final do arquivo (“append”), se ele já existir. No caso do arquivo não

existir um novo será criado.

“rb” Abre um arquivo binário para leitura. Igual ao modo “r”, só que para

binário.

“wb” Cria um arquivo binário para gravação. Igual ao modo “w”, só que para

binário.

“ab” Abre um arquivo texto para gravação. Igual ao modo “a”, só que para

binário.

“r+” Abre um arquivo texto para leitura e gravação. O arquivo deve existir

e pode ser modificado.

“w+” Cria um arquivo texto para leitura e gravação. Se o arquivo não existir

ele será criado. Se já existir, o conteúdo anterior será destruído.

Page 8: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Modos de Abertura (Cont.)

Modo Significado

“a+” Abre um arquivo texto para gravação e leitura. Os dados serão

adicionados no final do arquivo (“append”), se ele já existir. No caso do

arquivo não existir um novo será criado.

“r+b” Abre um arquivo binário para leitura e escrita. Igual ao modo “r+”, só

que para binário.

“w+b” Cria um arquivo binário para gravação e leitura. Igual ao modo “w+”, só

que para binário.

“a+b” Abre um arquivo texto para gravação e leitura. Igual ao modo “a+”, só

que para binário.

Page 9: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Abrindo um arquivo

Exemplo:1. FILE *arquivo;

2. arquivo = fopen(“arquivo.txt”, “w”);

3. if(!arquivo)

4. printf(“Erro ao abrir o arquivo\n”);

5. else{

6. printf(“Arquivo aberto com sucesso!”);

7. }

A condição !arquivo testa se o arquivo foi aberto com sucesso porque no caso de um erro a função fopen() retorna um ponteiro nulo (NULL).

Page 10: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Algumas funções

fputs( string , arquivo)

Escreve uma string no arquivo

fgets ( string , tamanhoDaString, arquivo)

Lê tamanhoDaString caracteres do arquivo

nomeDoArquivo para a string

fprintf (arquivo, string, <Parâmetros>)

Semelhante ao printf, porém a saída é o arquivo

fscanf (arquivo, string de controle, <variáveis>)

Semelhante ao scanf, porém a entrada vem do arquivo

Page 11: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Algumas funções

fgetc (arquivo)

Lê um caractere do stream arquivo e o retorna

fputc( caractere , arquivo)

Escreve o caractere no arquivo

feof (arquivo)

Retorna 1 se estiver no fim do arquivo

fflush (arquivo)

Limpa o buffer para os arquivos

Page 12: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

Uma vez aberto o arquivo, podemos ler ou escrever

nele utilizando algumas funções.

Page 13: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

fclose() – Fecha um arquivo

Um arquivo deverá ser fechado após seu uso;

int fclose (FILE *fp);

Page 14: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

putc() – Escreve um caractere no arquivo

int putc (int ch, FILE *fp);

OBS.: fputc() é equivalente a putc()

Page 15: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Usando putc para escrever

no arquivo

#include <stdio.h>

int main()

{

FILE *arquivo;

char nome[30];

int i;

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

if(!arquivo)

{

printf( "Erro na abertura do arquivo");

exit(0);

}

printf("Entre com o nome a ser gravada no arquivo:");

gets(nome);

for(i=0; nome[i]; i++)

putc(nome[i], arquivo);

fclose(arquivo);

return 0;

}

Page 16: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Usando fputs para escrever

no arquivo

#include <stdio.h>

int main()

{

FILE *arquivo;

char nome[30];

int i;

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

if(!arquivo)

{

printf( "Erro na abertura do arquivo");

exit(0);

}

printf("Entre com o nome a ser gravada no arquivo:");

gets(nome);

fputs(nome, pf);

fclose(arquivo);

return 0;

}

Page 17: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Usando fgets para ler

do arquivo

#include <stdio.h>

int main()

{

FILE *arquivo;

char nome[30];

int i;

arquivo = fopen("arquivo.txt",“r");

if(!arquivo)

{

printf( "Erro na abertura do arquivo");

exit(0);

}

fgets(nome, 30, pf);

fclose(arquivo);

return 0;

}

Page 18: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

getc() - retorna um caractere lido do arquivo;

int getc (FILE *fp);

OBS.: Equivalente à fgetc().

Page 19: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

feof() - retorna não-zero se o arquivo chegou ao

EOF ("End Of File"), caso contrário retorna zero.

int feof (FILE *fp);

Page 20: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

#include <stdio.h>

#include <stdlib.h>

int main()

{

FILE *fp;

int c;

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

if(!fp)

{

printf( "Erro na abertura do arquivo");

exit(0);

}

while((c = getc(fp) ) != EOF)

printf("%c", (char)c);

fclose(fp);

return 0;

}

Page 21: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

fgets() - Para se ler uma string num arquivo.

char *fgets (char *str, int tamanho,FILE *fp);

A função lê a string até que um caracter de nova linha

seja lido ou (tamanho – 1) caracteres tenham sido lidos.

Se o caracter 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).

Page 22: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

fputs() - escreve uma string num arquivo.

char *fputs (char *str, FILE *fp);

Page 23: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

ferror() - determina se uma operação com arquivo

produziu um erro. Retorna zero caso não tenha

ocorrido erro.

int ferror (FILE *fp);

Page 24: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

#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;

}

Page 25: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

fscanf() - funciona como a função scanf()

int fscanf (FILE *fp,char *str,...);

a única diferença do protótipo de fscanf() para o de

scanf() é a especificação do arquivo origem através

do ponteiro de arquivo.

Page 26: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

fprintf() - funciona como a função printf()

int fprintf (FILE *fp,char *str,...);

a única diferença do protótipo de fprintf() para o de

printf() é a especificação do arquivo destino através

do ponteiro de arquivo.

Page 27: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

Podemos escrever e ler blocos de dados em um

determinado arquivo:

fread()

fwrite()

Utilizando em arquivos binários

Page 28: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

fread() - ler blocos de dados

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.

Page 29: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

fwrite() - Escreve blocos de dados;

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.

Page 30: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

#include <stdio.h>

int main() {

FILE *pf;

float pi = 3.1415, 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);

}

Page 31: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

fseek() – Alterando a posição do arquivo, posiciona

um arquivo em um byte específico

int fseek(arquivo, numeroDeBytes, origem);

"Salta“ o correspondente número de bytes (pode ser

utilizado sizeof()) passados a partir de origem, sendo

origem uma das 3 opções:

SEEK_SET início do arquivo

SEEK_CUR posição atual

SEEK_END fim do arquivo

Page 32: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

#include <stdio.h>

int main ()

{

FILE * pFile;

pFile = fopen ( "example.bin" , "wb" );

fputs ( "This is an apple." , pFile );

fseek ( pFile , 9 , SEEK_SET );

fputs ( " sam" , pFile );

fclose ( pFile );

return 0;

}Saída:

Qual vai ser a saída????

Page 33: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

#include <stdio.h>

int main ()

{

FILE * pFile;

pFile = fopen ( "example.bin" , "wb" );

fputs ( "This is an apple." , pFile );

fseek ( pFile , 9 , SEEK_SET );

fputs ( " sam" , pFile );

fclose ( pFile );

return 0;

}Saída:

This is a sample

Page 34: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Manipulação de Arquivos

rewind () - Volta ponteiro ao inicio do arquivo

Int rewind ( arquivo ) ;

Page 35: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Exercício

1 - Fazer um programa que salva a estrutura de

“Cliente” (da Aula 09 - Estrutura) em um arquivo.

2 - Fazer um programa que ler de um arquivo os

dados salvos da estrutura Cliente e os recupera

para serem trabalhados. Imprimir na tela a partir da

estrutura os dados lidos.

Gustavo Callou DEINFO/UFRPE 35

Page 36: Aula 10 Arquivos - cin.ufpe.brgrac/ip/Aula11 - Arquivos.pdf · Exemplo: FILE *arquivo; arquivo = fopen(“arquivo.txt”, “w”); Modos de Abertura Modo Significado “r” Abre

Perguntas?