UNIBRATEC Ensino Superior e Tcnico em Informtica DHD
UNIBRATEC – Ensino Superior e Técnico em Informática DHD – Desenvolvimento em Hardware 1 Aula – Arquivos. Básicos Capítulo 1 – 14 Conceitos Wednesday, February 24, 2021
14 UNIBRATEC – Ensino Superior e Técnico em Informática DHD – Desenvolvimento em Hardware Arquivos Prof. Frederico Brito Fernandes unibratec@fredbf. com 2 Aula – Arquivos. Básicos Capítulo 1 – 14 Conceitos 1. Abrindo e fechando 2. Escrevendo e lendo caracteres 3. Verificando fim de arquivo 4. Lendo e escrevendo strings 5. Lendo e escrevendo para buffer 6. Outras funções Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Arquivos: abrindo • Biblioteca: stdio. h • Ponteiro para arquivo FILE *p; r+ abre para leitura e gravação, sem destruir o conteúdo anterior • fopen(): abrir um arquivo em disco para leitura, gravação, etc FILE *fopen (char *nome_do_arquivo, char *modo); 3 Aula 14 – Arquivos Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Arquivos: abrindo • Ex: FILE *fp; fp=fopen (“teste. txt", “r"); if (fp==NULL) printf ("Erro na abertura do arquivo. "); // Declaração da estrutura // no diretório corrente // ponteiro nulo • Caso o arquivo teste. txt não exista, a função fopen() retorna NULL, que é o ponteiro nulo, definido em C • Porém, veja o exemplo abaixo, que abre o arquivo para escrita: FILE *fp; fp=fopen (“teste. txt", “w"); if (fp==NULL) printf ("Erro na abertura do arquivo. "); // Declaração da estrutura // no diretório corrente // ponteiro nulo • Caso o arquivo não exista, ele será criado, e caso exista, será destruído • Mas quando será retornado NULL? Ex: sem permissão de escrita 4 Aula 14 – Arquivos Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Arquivos: abrindo • Para acessarmos arquivos em outras pastas, devemos usar, no Windows, a dupla contra-barra • Ex 1: FILE *fp; fp=fopen (“c: \Fred\teste. txt", “r"); if (!fp) printf ("Erro na abertura do arquivo. "); // Declaração da estrutura // dupla contra-barra no Windows // igual a testar fp==NULL • Podemos re-escrever o exemplo acima da seguinte maneira: • Ex 2: FILE *fp; // dupla contra-barra no Windows if (! (fp=fopen (“c: \Fred\teste. txt", “r")) ) printf ("Erro na abertura do arquivo. "); equivalente a 5 // Declaração da estrutura // duas operações são realizadas aqui! if ( (fp=fopen (“c: \Fred\teste. txt", “r")) == NULL ) Aula 14 – Arquivos Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (1) Arquivos: fechando • fclose(): retorna zero, se o arquivo fechar normalmente int fclose (FILE *fp); Arquivo • Fechar um arquivo significa gravar todos os caracteres que estavam no buffer, no arquivo em disco Programa Escrito em C #include <stdio. h> main(){ FILE *arq; ; . . . } 6 Aula 14 – Arquivos Buffer Frederico Brito Fernandes 27 MG. . . HD Um buffer é uma área de memória temporária utilizada para armazenar blocos de dados lidos do disco Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (2) Arquivos: escrevendo caracteres • putc(): escreve um caractere no arquivo int putc (int ch, FILE *fp); Ex: char Arquivo #include <stdio. h> #include <conio. h> main(){ char *string="Frederico Brito Fernandes"; FILE *fp; if (!(fp=fopen ("d: \teste. txt", "w")) ) printf ("Erro na abertura do arquivo. "); while(*string){ putc(*string, fp); string++; } getch(); } 7 Aula 14 – Arquivos // ponteiro nulo // lembre-se da aula de ponteiros! Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (2) Arquivos: auto-avaliação • Faça um programa que peça para o usuário digitar uma string. Em seguida, seu programa deverá escrever essa string no arquivo teste. txt • Em seguida, altere o programa acima, pra escrever essa mesma string duas vezes, no mesmo arquivo, sendo que separadas por uma quebra de linha – Dica: Escreva o caractere ‘n’ antes de re-escrever a string 8 Aula 14 – Arquivos Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (2) Arquivos: lendo caracteres • getc(): retorna o caractere lido do arquivo int getc (FILE *fp); Arquivo Ex: programa que lê caracteres do arquivo teste. txt #include <stdio. h> #include <conio. h> main(){ FILE *fp; char c; if (!(fp=fopen ("d: \teste. txt", "r")) ) // ponteiro nulo printf ("Erro na abertura do arquivo. "); c = getc(fp); printf("n. Primeiro caractere lido eh: %c", c); printf("n. Segundo caractere lido eh: %c", getc(fp)); printf("n. Terceiro caractere lido eh: %c", getc(fp)); printf("n. Quarto caractere lido eh: %c", getc(fp)); getch(); } 9 Aula 14 – Arquivos Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Arquivos: verificando fim de arquivo • feof(): retorna não-zero se chegou ao final do arquivo int feof (FILE *fp); Ex: Arquivo #include <stdio. h> #include <conio. h> main(){ FILE *fp; if (!(fp=fopen ("d: \teste. txt", "r")) ) printf ("Erro na abertura do arquivo. "); while (!feof(fp)){ printf("%c", getc(fp)); } getch(); } 10 Aula 14 – Arquivos // ponteiro nulo // nao for final de arquivo Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Arquivos: verificando fim de arquivo • EOF: caractere constante que indica o final do arquivo – Normalmente comparada com a função getc() Ex: #include <stdio. h> #include <conio. h> main(){ FILE *fp; char c; if (!(fp=fopen ("d: \teste. txt", "r")) ) printf ("Erro na abertura do arquivo. "); while ( (c=getc(fp)) != EOF ){ printf("%c", c); } getch(); } 11 Aula 14 – Arquivos // ponteiro nulo // Duas operacoes sao feitas aqui! Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (3) Arquivos: auto-avaliação • Faça um programa que crie um arquivo novo, de nome novo. txt, e que receba o conteúdo do arquivo teste. txt (que você já criou nos exercícios anteriores) • Faça uma função que receba o nome de um arquivo e que retorne o número de caracteres desse arquivo 12 void qtde. Char(char *nome); // protótipo da função qtde. Char(“C: \Fred\teste. txt”); // chamada da função Aula 14 – Arquivos Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (4) Arquivos: lendo uma string • fgets(): lê uma string do arquivo char *fgets (char *str, int tamanho, FILE *fp); Ex: String Tamanho da String #include <stdio. h> #include <conio. h> main(){ FILE *fp; char s[50]; if (!(fp=fopen ("d: \teste. txt", "r")) ) printf ("Erro na abertura do arquivo. "); fgets(s, 5, fp); printf("%s", s); getch(); } 13 Aula 14 – Arquivos Arquivo // ponteiro nulo Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (4) Arquivos: escrevendo uma string • fputs(): escreve uma string no arquivo char *fgets (char *str, FILE *fp); Ex: String Arquivo #include <stdio. h> #include <conio. h> main(){ FILE *fp; char s[50] = “Frederico Brito Fernandes”; if (!(fp=fopen ("d: \teste. txt", “w")) ) printf ("Erro na abertura do arquivo. "); fputs(s, fp); printf("%s", s); getch(); } 14 Aula 14 – Arquivos // ponteiro nulo Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (4) Arquivos: auto-avaliação • Faça um programa que abra o arquivo teste. txt, e que copie 5 caracteres desse arquivo em um outro arquivo, de nome novo. txt – Dica: use as funções fgets() e fputs() 15 Aula 14 – Arquivos Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (5) Arquivos: escrevendo um buffer • fwrite(): escreve uma porção de bytes no arquivo unsigned fwrite(void *buffer, int numero_de_bytes, int count, FILE *fp); Ex: #include <stdio. h> #include <conio. h> typedef struct{ char nome[40]; int idade; float salario; }t. Empregado; Ponteiro para um tipo qualquer Quantidade de bytes desse tipo Número de elementos desse tipo Arquivo main(){ FILE *fp; t. Empregado emp = {"Frederico Brito Fernandes", 27, 550}; char s[50]; if (!(fp=fopen ("d: \teste. txt", "w")) ) // ponteiro nulo printf ("Erro na abertura do arquivo. "); fwrite(&emp, sizeof(t. Empregado), 1, fp); getch(); } 16 Aula 14 – Arquivos Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (5) Arquivos: lendo para um buffer • fread(): lê uma porção de bytes do arquivo para escrever no buffer unsigned fread(void *buffer, int numero_de_bytes, int count, FILE *fp); Ex: Ponteiro para um tipo qualquer Quantidade de bytes desse tipo Número de elementos desse tipo Arquivo #include <stdio. h> #include <conio. h> typedef struct{ char nome[40]; int idade; float salario; }t. Empregado; main(){ FILE *fp; t. Empregado emp; // = {"Frederico Brito Fernandes", 27, 550}; if (!(fp=fopen ("d: \teste. txt", "r+")) ) // ponteiro nulo printf ("Erro na abertura do arquivo. "); fread(&emp, sizeof(t. Empregado), 1, fp); printf("n. Nome: %s", emp. nome); printf("n. Idade: %d", emp. idade); printf("n. Salario: R$ %. 2 f", emp. salario); getch(); } 17 Aula 14 – Arquivos Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (5) Arquivos: auto-avaliação 1. Faça um programa que crie um arquivo de nome teste. txt, e armazene o vetor de inteiros abaixo int vetor [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 2. Agora faça um programa que abra o arquivo acima, armazene os 10 inteiros num vetor. Finalmente, imprima esses valores a partir desse vetor. 3. Crie uma função que receba um vetor de inteiros, a quantidade de valores a serem gravados no arquivo e o nome do arquivo. 18 void grava. Vetor(int vet[], int n, char *arquivo); // protótipo da função grava. Vetor(vet, 10, “C: \Fred\teste. txt”); // chamada da função Aula 14 – Arquivos Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (5) Arquivos: auto-avaliação 4. Faça um programa que crie um arquivo de nome teste. txt, e armazene as informações do vetor empregados abaixo typedef struct{ char nome[40]; int idade; float salario; }t. Empregado; main(){ t. Empregado empregados [4] = { {"Frederico Brito Fernandes", 27, 550}, {"Beltrano da Silva Sauro", 42, 1434. 53}, {"Cicrano de Lima Penante", 14, 6000}, {"Fulano da Cruz Machado", 32, 1000} }; } 5. Agora faça um programa que abra o arquivo acima, armazene as informações no vetor empregados criado por você. Finalmente, imprima as informações dos empregados a partir desse vetor. 19 Aula 14 – Arquivos Wednesday, February 24, 2021
DHD – Desenvolvimento em Hardware Prof. Frederico Brito Fernandes (6) Arquivos: outras funções 1. fseek(): move o ponteiro de leitura/escrita dentro do arquivo int fseek (FILE *fp, long numbytes, int origem); Arquivo Deslocamento 2. rewind(): retorna a posição corrente para o início do arquivo void rewind (FILE *fp); 3. remove(): apaga o arquivo especificado int remove (char *nome_do_arquivo); 20 Aula 14 – Arquivos Wednesday, February 24, 2021
- Slides: 20