Back
Close

Programação C

MarcoVaz
4,055 views
Previous: Manipulando Arquivos em C (cadeias) Next: Exercícios Arquivos

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:

#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);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • 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:

#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);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • 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: programa
  • 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
#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);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io
codingame x discord
Join the CodinGame community on Discord to chat about puzzle contributions, challenges, streams, blog articles - all that good stuff!
JOIN US ON DISCORD
Online Participants