Scrieți un fișier binar în C++

Scrieti Un Fisier Binar In C



În programarea C++, gestionarea fișierelor binare este fundamentală pentru stocarea și manipularea datelor brute. Indiferent dacă lucrați cu imagini, fișiere audio sau structuri de date personalizate, abilitatea de a scrie eficient fișierele binare este crucială. Fișierele binare stochează datele într-un format care nu poate fi citit de om, ceea ce le face potrivite pentru diverse aplicații, cum ar fi stocarea de structuri complexe, imagini sau orice date care nu urmează o reprezentare simplă bazată pe text.

C++ oferă biblioteca pentru a interacționa cu fișierele binare, în special cu clasa „ofstream”, pentru scrierea datelor binare. Această capacitate permite dezvoltatorilor să creeze, să modifice și să gestioneze fără probleme fișierele binare. Acest articol explorează diferitele metode și tehnici de scriere a fișierelor binare în C++, aruncând lumină asupra aplicațiilor și cazurilor de utilizare ale acestora.

Scrieți un fișier binar folosind C++

Pentru a salva datele într-un fișier binar folosind C++, este folosită metoda write(). Această funcție scrie un număr specificat de octeți în fluxul desemnat, începând de la locația pointerului „put”. Dacă indicatorul „pus” este la sfârșit, fișierul este extins. Cu toate acestea, noile date suprascrie caracterele existente dacă indicatorul se află în fișier. În cazul unei erori în timpul procesului de scriere, fluxul este marcat ca fiind într-o stare de eroare. Acum, să trecem la exemple pentru a învăța cum să scrieți într-un fișier binar folosind câteva funcții C++ simple și încorporate.







Metoda 1: Scrierea fișierelor binare cu date structurate

Poate fi necesar să scrieți date structurate, cum ar fi structuri personalizate, într-un fișier binar în multe cazuri. Să luăm în considerare un exemplu care conține o înregistrare a unei persoane care include numele, înălțimea și vârsta unei persoane. Vedeți următorul cod dat și uitați-vă la explicație:



#include

#include

struct Persoană {

char Nume [ cincizeci ] ;

int vârstă ;

dubla înălţime ;

} ;

int principal ( ) {

std :: ofstream outFile ( 'people.bin' , std :: ios :: binar ) ;

dacă ( ! outFile. este deschis ( ) ) {

std :: cerr << 'Eroare! Nu se poate deschide fișierul pentru scriere!' << std :: endl ;

întoarcere 1 ;

}

Persoana persoana1 = { „Kalsoom Ilyas” , 25 , 1,75 } ;

Persoana persoana2 = { „Kalsoom Bajwa” , 30 , 1,68 } ;

outFile. scrie ( reinterpret_cast < char *> ( & persoana 1 ) , dimensiunea ( persoana 1 ) ) ;

outFile. scrie ( reinterpret_cast < char *> ( & persoana2 ) , dimensiunea ( persoana2 ) ) ;

outFile. închide ( ) ;

std :: cout << „Înregistrarea persoanei este scrisă cu succes într-un fișier binar.” << std :: endl ;

întoarcere 0 ;

}

Iată o defalcare a codului cu detaliile specifice. Programul începe cu definirea unei structuri personalizate numită „Persoană”. Are trei câmpuri: nume, vârstă și înălțime. Detaliile acestor câmpuri sunt următoarele:



  • Nume: Un șir pentru a stoca numele persoanei (până la 50 de caractere)
  • vârstă: Un număr întreg pentru a stoca vârsta persoanei
  • înălţime: Un dublu pentru a stoca înălțimea persoanei

După definirea structurii „Persoană”, începe funcția principală, care este punctul de intrare al programului. Prima linie din programul principal deschide un fișier numit „people.bin”. Folosim „std::ofstream” pentru a crea un fișier numit „people.bin” pentru scrierea datelor în format binar. Verificarea dacă fișierul se deschide cu succes este foarte importantă. În caz contrar, este afișat un mesaj de eroare și programul se oprește. Prin urmare, cu ajutorul condiției „if” și al funcției is_open(), verificăm dacă fișierul s-a deschis cu succes sau nu.





Aici sunt create cele două obiecte „Persoană”. Definim două variabile, „persoană1” și „persoană2”, de tip „Persoană”. Atribuim variabilei nume, vârstă și valori de înălțime pentru „Kalsoom Ilyas” și „Kalsoom Bajwa”.

Acum că avem datele de scris într-un fișier binar, să realizăm funcția reală cu funcția write(). Folosim „outFile.write” pentru a scrie conținutul fiecărui obiect „Persoană” în fișier. „reinterpret_cast(&person1)” și „reinterpret_cast(&person2)” convertesc întreaga structură „Person” (inclusiv toate câmpurile) într-un flux continuu de octeți care este potrivit pentru scrierea în fișierul binar . Scriem dimensiunea fiecărui obiect „Person” folosind „sizeof(person1)” și „sizeof(person2)” pentru a ne asigura că toate datele sunt scrise corect.



După ce ați scris datele pe fișier, este foarte important să îl închideți corect, astfel încât nicio dată să nu se piardă din cauza vreunei alte funcții. Folosim outFile.close() pentru a elibera resursele care sunt asociate cu fișierul și pentru a ne asigura că datele sunt scrise cu acuratețe. În cele din urmă, imprimăm un mesaj care confirmă scrierea cu succes a datelor în fișierul binar.

Dacă explicăm acest exemplu în termeni mai simpli, imaginați-vă un caiet special care poate stoca doar o informație despre oameni într-un limbaj secret. Acest cod creează un plan pentru organizarea informațiilor (nume, vârstă, înălțime). Deschide caietul, completează profilurile pentru două persoane, traduce informațiile în limbajul secret și le scrie cu grijă înăuntru. Apoi închide notebook-ul în siguranță, păstrând profilurile pentru utilizare ulterioară. Consultați rezultatul programului care este dat în următorul instantaneu:

Metoda 2: Scrierea numerelor întregi într-un fișier binar

În această metodă, o matrice de numere întregi este scrisă într-un fișier binar numit „integers.bin”. „reinterpret_cast” tratează tabloul întreg ca o secvență de caractere (octeți) pentru scriere în fișier. Acest lucru este deosebit de important deoarece fișierele binare se ocupă de date brute de octeți. Să aruncăm o privire la următorul exemplu simplu:

#include

#include

int principal ( ) {

std :: ofstream outFile ( 'integers.bin' , std :: ios :: binar ) ;

dacă ( ! outFile. este deschis ( ) ) {

std :: cerr << 'Eroare! Nu se poate deschide fișierul pentru scriere!' << std :: endl ;

întoarcere 1 ;

}

int numere [ ] = { 42 , 99 , - 1 , 0 } ;

outFile. scrie ( reinterpret_cast < char *> ( numere ) , dimensiunea ( numere ) ) ;

outFile. închide ( ) ;

std :: cout << „Numerele întregi date au fost scrise cu succes în fișierul binar.” << std :: endl ;

întoarcere 0 ;

}

Iată o defalcare a codului cu detaliile specifice:

„#include ” și ​​„#include ” aduc instrumentele necesare pentru lucrul cu fișiere și pentru tipărirea mesajelor precum cin și, respectiv, write(). „std::ofstream outFile(„integers.bin”, std::ios::binary);” deschide un fișier binar numit „integers.bin” care poate stoca numerele doar într-un cod secret (format binar). Verifică dacă fișierul este deschis. În caz contrar, apare un mesaj de eroare.

Următoarea linie care este „numere int[] = {42, 99, -1, 0};” definește o matrice numită „numbers” cu numere întregi 42, 99, -1 și 0. „outFile.write(reinterpret_cast(numbers), sizeof(numbers));” traduce cu atenție numerele întregi în format binar și le scrie în fișierul „integer.bin”. „outFile.close();” închide fișierul corect pentru a menține numerele întregi în siguranță și organizate. În cele din urmă, este tipărit un mesaj pentru a confirma că numerele întregi au fost stocate cu succes în fișierul binar. Consultați următoarea ieșire a acestui program pentru a vedea rezultatul:

Concluzie

Scrierea fișierelor binare în C++ este o abilitate crucială pentru a gestiona eficient diferitele tipuri de date. În această explorare a scrierii fișierelor binare în C++, am învățat cum poate fi folosită clasa „ofstream” pentru a gestiona eficient datele binare. Indiferent dacă se ocupă cu numere întregi simple sau cu date structurate folosind structuri personalizate, procesul implică deschiderea unui flux de fișiere, scrierea datelor în format binar și apoi închiderea fișierului. Această capacitate oferă dezvoltatorilor C++ flexibilitatea de a lucra cu o gamă variată de tipuri de date binare, contribuind la versatilitatea limbajului în aplicații care variază de la programarea la nivel de sistem până la procesarea multimedia.