Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Gravando e lendo Blocos de dados em Arquivos C
- Podemos escrever e ler blocos de dados em arquivos C através das funções: fwrite() e fread()
- A função fwrite()
unsigned fwrite(void *bloco, int numero_de_bytes, int total, FILE *arq)
bloco: ponteiro para a região de memória na qual estão os dados;
numero_de_bytes: tamanho de cada posição de memória a ser escrita;
total: quantidade de blocos de memória de tamanho "numero_de_bytes" que devem ser escritos;
arq: ponteiro associado ao arquivo onde os dados serão escritos.
Exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *farq;
int i;
char texto[51]={"Teste de gravacao e leitura de dados-arquivo texto"};
int vet[4] = {1,2,3,4};
texto[50]='\0';
farq = fopen("arqtexto.txt", "w");
fwrite(texto, sizeof(char), strlen(texto), farq); // grava a cadeia texto no arquivo
fwrite(vet, sizeof(int), 4, farq); // grava o vetor vet no arquivo
fclose(farq);
}
Enter to Rename, Shift+Enter to Preview
- A função fread() é semelhante a fwrite() para realizar a leitura dos dados.
unsigned fread(void *bloco, int numero_de_bytes, int total, FILE *arq)
Exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *farq;
int i;
char textos[51];
int vets[4];
char texto[51]={"Teste de gravacao e leitura de dados-arquivo texto"};
int vet[4] = {1,2,3,4};
// Realiza a Criação do Arquivo e Gravação dos dados
texto[50]='\0';
farq = fopen("arqtexto.txt", "w");
fwrite(&texto, sizeof(char), strlen(texto), farq); // grava a cadeia texto no arquivo
fwrite(&vet, sizeof(int), 4, farq); // grava o vetor vet no arquivo
fclose(farq);
// Realiza a Leitura dos dados gravados
farq = fopen("arqtexto.txt", "r"); // Abre o arquivo para leitura
if(farq == NULL){
printf( "Erro na abertura do arquivo");
exit(1);
}
fread(&textos, sizeof(char), strlen(texto), farq); // lê a cadeia texto no arquivo
printf("\n\nTexto lido do Arquivo: %s\n\n", textos);
fread(&vets, sizeof(int), 4, farq); //lê os 4 números para o vetor vets no arquivo
printf("Digitos Armazenados no Arquivo: ");
for (i = 0; i < 4; i++) {
printf("%d ", vets[i]);
}
fclose(farq);
}
Enter to Rename, Shift+Enter to Preview
- Os acessos aos dados em um arquivo geralmente é sequencial, mas é possível fazer buscas e acessos randômicos através da função fseek():
- Esta função posiciona a leitura ou escrita no arquivo em tantos bytes, a partir de um ponto especificado.
- A função fseek recebe 3 parâmetros
- fptr: o ponteiro para o arquivo;
- numbytes: é o total de bytes a partir do tipo a ser pulado;
- tipo: determina a partir de onde os numbytes de movimentação serão contados.
- Os valores possíveis para tipo estão definidos em stdio.h e são:
- Portanto, para mover numbytes a partir
- do início do arquivo, tipo deve ser SEEK_SET
- da posição atual, tipo deve ser SEEK_CUR
- do final do arquivo, tipo deve ser SEEK_END
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
struct alunos {
int matric;
char nome[10];
int idade;
};
int main()
{
FILE *farq;
struct alunos al, alun[4] = {1, "Maria", 20, 2, "Ana", 19, 3, "Carlos", 16, 4, "Celso",19};
farq = fopen("arqtexto.txt", "wb");
fwrite(alun, sizeof(struct alunos), 4, farq); // grava o array de registros alunos
fclose(farq);
farq = fopen("arqtexto.txt", "rb");
fseek(farq, 3*sizeof(struct alunos), SEEK_SET); // posiciona a leitura no quarto registro
fread(&al, sizeof(struct alunos), 1, farq); // lê o quarto registro de aluno
printf("\n\n%d\n%s\n%d", al.matric, al.nome, al.idade);
fclose(farq);
}
Enter to Rename, Shift+Enter to Preview
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content