Arquivos binários
✍️ Escrita
Para efetuar a operação de escrita em um arquivo binário, fazemos uso da função fwrite
, que possui a seguinte assinatura:
size_t fwrite(const void *conteudo, size_t tamanhoUnitario, size_t qtde, FILE *arquivo);
const void *conteudo
: Ponteiro para o bloco de memória com os dados a serem escritos.size_t tamanhoUnitario
: Tamanho, em bytes, de cada elemento a ser escrito.size_t qtde
: Número de elementos, cada um com tamanho de size bytes, a serem escritos.FILE *arquivo
: Ponteiro para o arquivo onde os dados serão escritos.
Como retorno, a função fwrite
apresenta o número total de itens que foram efetivamente gravados. Se esse valor for inferior a qtde
, parte dos dados não foram persistidos.
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *arquivo = fopen("arquivo.txt", "wb");
int vetor[] = {1, 2, 3, 4, 5};
size_t qtde = sizeof(vetor) / sizeof(vetor[0]);
if(!arquivo) {
printf("Erro ao abrir arquivo para escrita.\n");
return 1;
}
// Escrevendo array de inteiros no arquivo
fwrite(vetor, sizeof(int), qtde, arquivo);
fclose(arquivo);
return 0;
}
👀 Leitura
Para efetuar a operação de leitura, usamos a função fwrite
, que tem os mesmos parâmetros da função fwrite
:
size_t fread(const void *conteudo, size_t tamanhoUnitario, size_t qtde, FILE *arquivo);
void *conteudo
: Ponteiro para um bloco de memória (principal, do programa) onde os dados lidos serão armazenados.size_t tamanhoUnitario
: Tamanho, em bytes, de cada elemento a ser lido.size_t qtde
: Número de elementos, cada um com tamanho de size bytes, a serem lidos.FILE *arquivo
: Ponteiro para o arquivo de onde os dados serão lidos.
De forma similar à escrita, a função fread
retorna o número total de elementos lidos com sucesso. O número retornado pode ser menor do que desejado em caso de erro ou se o fim do arquivo for alcançado antes de ler qtde
elementos.
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *arquivo = fopen("arquivo.txt", "rb");
int vetor[5];
size_t qtde = sizeof(vetor) / sizeof(vetor[0]);
if (!arquivo) {
printf("Erro ao abrir arquivo para leitura.\n");
return 1;
}
// Lendo dados do arquivo para o buffer
fread(vetor, sizeof(int), qtde, arquivo);
// Imprimindo os dados lidos
for (int i = 0; i < qtde; i++) {
printf("%d\n", vetor[i]);
}
fclose(arquivo);
return 0;
}
Nesta página