Escreva um arquivo binário em C++

Escreva Um Arquivo Binario Em C



Na programação C++, lidar com arquivos binários é fundamental para armazenar e manipular os dados brutos. Esteja você trabalhando com imagens, arquivos de áudio ou estruturas de dados personalizadas, a capacidade de gravar arquivos binários de maneira eficiente é crucial. Os arquivos binários armazenam os dados em um formato que não é legível por humanos, tornando-os adequados para diversas aplicações, como armazenamento de estruturas complexas, imagens ou quaisquer dados que não sigam uma representação simples baseada em texto.

C++ fornece a biblioteca para interagir com arquivos binários, particularmente a classe “ofstream”, para escrever os dados binários. Esse recurso permite que os desenvolvedores criem, modifiquem e gerenciem perfeitamente os arquivos binários. Este artigo explora os vários métodos e técnicas para escrever arquivos binários em C++, esclarecendo suas aplicações e casos de uso.

Escreva um arquivo binário usando C++

Para salvar os dados em um arquivo binário usando C++, o método write() é empregado. Esta função grava um número especificado de bytes no fluxo designado, começando no local do ponteiro “put”. Se o ponteiro “put” estiver no final, o arquivo será estendido. No entanto, os novos dados substituirão os caracteres existentes se o ponteiro estiver dentro do arquivo. No caso de um erro durante o processo de gravação, o fluxo é marcado como estando em estado de erro. Agora, vamos passar aos exemplos para aprender como escrever em um arquivo binário usando algumas funções simples e integradas em C++.







Método 1: Escrevendo Arquivos Binários com Dados Estruturados

Em muitos casos, pode ser necessário gravar dados estruturados, como estruturas personalizadas, em um arquivo binário. Vamos considerar um exemplo que contém o registro de uma pessoa que inclui o nome, a altura e a idade de uma pessoa. Veja o código fornecido a seguir e dê uma olhada na explicação:



#include

#include

estrutura Pessoa {

Caracteres nome [ cinquenta ] ;

interno idade ;

dobro altura ;

} ;

interno principal ( ) {

padrão :: ofstream arquivo de saída ( 'pessoas.bin' , padrão :: iOS :: binário ) ;

se ( ! arquivo de saída. está aberto ( ) ) {

padrão :: cerr << 'Erro! Não é possível abrir o arquivo para gravação!' << padrão :: fim ;

retornar 1 ;

}

Pessoa pessoa1 = { 'Kalsoom Ilyas' , 25 , 1,75 } ;

Pessoa pessoa2 = { 'Kalsoom Bajwa' , 30 , 1,68 } ;

arquivo de saída. escrever ( reinterpretar_cast < Caracteres *> ( & pessoa 1 ) , tamanho de ( pessoa 1 ) ) ;

arquivo de saída. escrever ( reinterpretar_cast < Caracteres *> ( & pessoa2 ) , tamanho de ( pessoa2 ) ) ;

arquivo de saída. fechar ( ) ;

padrão :: corte << 'O registro da pessoa foi gravado com sucesso no arquivo binário.' << padrão :: fim ;

retornar 0 ;

}

Aqui está um detalhamento do código com detalhes específicos. O programa começa definindo uma estrutura personalizada chamada “Pessoa”. Possui três campos: nome, idade e altura. Os detalhes desses campos são os seguintes:



  • nome: Uma string para armazenar o nome da pessoa (até 50 caracteres)
  • idade: Um número inteiro para armazenar a idade da pessoa
  • altura: Um duplo para armazenar a altura da pessoa

Após definir a estrutura “Pessoa”, inicia-se a função principal que é o ponto de entrada do programa. A primeira linha do programa principal abre um arquivo chamado “people.bin”. Usamos “std::ofstream” para criar um arquivo chamado “people.bin” para escrever os dados em formato binário. Verificar se o arquivo abre com sucesso é muito importante. Caso contrário, uma mensagem de erro será exibida e o programa será interrompido. Assim, com a ajuda da condição “if” e da função is_open(), verificamos se o arquivo foi aberto com sucesso ou não.





Aqui, os dois objetos “Person” são criados. Definimos duas variáveis, “pessoa1” e “pessoa2”, do tipo “Pessoa”. Atribuímos os valores de nome, idade e altura da variável para “Kalsoom Ilyas” e “Kalsoom Bajwa”.

Agora que temos os dados para escrever em um arquivo binário, vamos executar a função real com a função write(). Usamos “outFile.write” para escrever o conteúdo de cada objeto “Person” no arquivo. O “reinterpret_cast(&person1)” e “reinterpret_cast(&person2)” convertem toda a estrutura “Person” (incluindo todos os seus campos) em um fluxo contínuo de bytes que é adequado para gravação no arquivo binário . Escrevemos o tamanho de cada objeto “Person” usando “sizeof(person1)” e “sizeof(person2)” para garantir que todos os dados sejam gravados corretamente.



Após gravar os dados no arquivo, é muito importante fechá-lo corretamente para que nenhum dado seja perdido por qualquer outra função. Usamos outFile.close() para liberar os recursos associados ao arquivo e garantir que os dados sejam gravados com precisão. Por fim, imprimimos uma mensagem que confirma o sucesso da gravação dos dados no arquivo binário.

Se explicarmos este exemplo em termos mais simples, imagine um caderno especial que só pode armazenar informações sobre pessoas em uma linguagem secreta. Este código cria um modelo para organizar as informações (nome, idade, altura). Ele abre o caderno, preenche os perfis de duas pessoas, traduz as informações para a linguagem secreta e as escreve cuidadosamente dentro. Em seguida, fecha o notebook com segurança, preservando os perfis para uso futuro. Consulte a saída do programa fornecida no seguinte instantâneo:

Método 2: Escrever números inteiros em um arquivo binário

Neste método, uma matriz de inteiros é gravada em um arquivo binário denominado “integers.bin”. O “reinterpret_cast” trata o array inteiro como uma sequência de caracteres (bytes) para gravação no arquivo. Isto é especialmente importante porque os arquivos binários lidam com dados brutos de bytes. Vejamos o seguinte exemplo simples:

#include

#include

interno principal ( ) {

padrão :: ofstream arquivo de saída ( 'inteiros.bin' , padrão :: iOS :: binário ) ;

se ( ! arquivo de saída. está aberto ( ) ) {

padrão :: cerr << 'Erro! Não é possível abrir o arquivo para gravação!' << padrão :: fim ;

retornar 1 ;

}

interno números [ ] = { 42 , 99 , - 1 , 0 } ;

arquivo de saída. escrever ( reinterpretar_cast < Caracteres *> ( números ) , tamanho de ( números ) ) ;

arquivo de saída. fechar ( ) ;

padrão :: corte << 'Os números inteiros fornecidos foram gravados com sucesso no arquivo binário.' << padrão :: fim ;

retornar 0 ;

}

Aqui está um detalhamento do código com detalhes específicos:

O “#include ” e “#include ” trazem as ferramentas necessárias para trabalhar com arquivos e imprimir as mensagens como cin e write(), respectivamente. O “std::ofstream outFile(“integers.bin”, std::ios::binary);” abre um arquivo binário chamado “integers.bin” que só pode armazenar os números em um código secreto (formato binário). Ele verifica se o arquivo está aberto. Caso contrário, será apresentada uma mensagem de erro.

A próxima linha que é “int numbers[] = {42, 99, -1, 0};” define uma matriz chamada “números” com inteiros 42, 99, -1 e 0. O “outFile.write(reinterpret_cast(numbers), sizeof(numbers));” traduz cuidadosamente os inteiros para o formato binário e os grava no arquivo “integer.bin”. O “outFile.close();” fecha o arquivo corretamente para manter os números inteiros seguros e organizados. Finalmente, uma mensagem é impressa para confirmar que os inteiros foram armazenados com sucesso no arquivo binário. Consulte a seguinte saída deste programa para ver o resultado:

Conclusão

Escrever arquivos binários em C++ é uma habilidade crucial para lidar com eficiência com os vários tipos de dados. Nesta exploração da gravação de arquivos binários em C++, aprendemos como a classe “ofstream” pode ser empregada para lidar com dados binários de forma eficiente. Seja lidando com números inteiros simples ou dados estruturados usando estruturas personalizadas, o processo envolve abrir um fluxo de arquivo, gravar os dados em formato binário e, em seguida, fechar o arquivo. Esse recurso fornece aos desenvolvedores C++ a flexibilidade de trabalhar com uma ampla gama de tipos de dados binários, contribuindo para a versatilidade da linguagem em aplicações que vão desde a programação em nível de sistema até o processamento multimídia.