Skriv en binær fil i C++

Skriv En Binaer Fil I C



I C++-programmering er håndtering av binære filer grunnleggende for å lagre og manipulere rådataene. Enten du jobber med bilder, lydfiler eller tilpassede datastrukturer, er evnen til å skrive de binære filene effektivt avgjørende. Binære filer lagrer dataene i et format som ikke er lesbart for mennesker, noe som gjør dem egnet for ulike applikasjoner som lagring av komplekse strukturer, bilder eller data som ikke følger en enkel tekstbasert representasjon.

C++ gir -biblioteket for å samhandle med binære filer, spesielt 'ofstream'-klassen, for å skrive binære data. Denne funksjonen lar utviklerne sømløst opprette, modifisere og administrere de binære filene. Denne artikkelen utforsker de ulike metodene og teknikkene for å skrive de binære filene i C++, og belyser deres applikasjoner og brukstilfeller.

Skriv en binær fil med C++

For å lagre dataene i en binær fil ved hjelp av C++, brukes skrive()-metoden. Denne funksjonen skriver et spesifisert antall byte til den angitte strømmen, og begynner på plasseringen av 'put'-pekeren. Hvis 'put'-pekeren er på slutten, utvides filen. De nye dataene overskriver imidlertid de eksisterende tegnene hvis pekeren er i filen. Ved feil under skriveprosessen merkes strømmen som feil. La oss nå gå videre til eksemplene for å lære hvordan du skriver i en binær fil ved å bruke noen enkle og innebygde C++-funksjoner.







Metode 1: Skrive binære filer med strukturerte data

Du må kanskje skrive strukturerte data, for eksempel tilpassede strukturer, til en binær fil i mange tilfeller. La oss vurdere et eksempel som inneholder en oversikt over en person som inkluderer navn, høyde og alder på en person. Se følgende gitte kode og ta en titt på forklaringen:



#include

#include

struktur Person {

røye Navn [ femti ] ;

int alder ;

dobbelt høyde ;

} ;

int hoved- ( ) {

std :: av strømmen utfil ( «people.bin» , std :: ios :: binær ) ;

hvis ( ! utfil. er åpen ( ) ) {

std :: cerr << 'Feil! Kan ikke åpne filen for skriving!' << std :: endl ;

komme tilbake 1 ;

}

Person person1 = { 'Kalsoom Ilyas' , 25 , 1,75 } ;

Person person 2 = { 'Kalsoom Bajwa' , 30 , 1,68 } ;

utfil. skrive ( reinterpret_cast < røye *> ( & person 1 ) , størrelsen av ( person 1 ) ) ;

utfil. skrive ( reinterpret_cast < røye *> ( & person2 ) , størrelsen av ( person2 ) ) ;

utfil. Lukk ( ) ;

std :: cout << 'Personens post er skrevet til binær fil vellykket.' << std :: endl ;

komme tilbake 0 ;

}

Her er en oversikt over koden med de spesifikke detaljene. Programmet begynner med å definere en tilpasset struktur kalt 'Person'. Den har tre felt: navn, alder og høyde. Detaljene i disse feltene er som følger:



  • Navn: En streng for å lagre personens navn (opptil 50 tegn)
  • alder: Et heltall for å lagre personens alder
  • høyde: En dobbel for å lagre personens høyde

Etter å ha definert 'Person'-strukturen, starter hovedfunksjonen som er programmets inngangspunkt. Den første linjen i hovedprogrammet åpner en fil som heter 'people.bin'. Vi bruker 'std::ofstream' for å lage en fil kalt 'people.bin' for å skrive dataene i binært format. Det er veldig viktig å sjekke om filen åpnes. Ellers vises en feilmelding og programmet stopper. Derfor, ved hjelp av 'if'-betingelsen og is_open()-funksjonen, sjekker vi om filen har åpnet vellykket eller ikke.





Her opprettes de to 'Person'-objektene. Vi definerer to variabler, 'person1' og 'person2', av typen 'Person'. Vi tildeler variabelnavn, alder og høydeverdier for 'Kalsoom Ilyas' og 'Kalsoom Bajwa'.

Nå som vi har dataene til å skrive i en binær fil, la oss utføre den faktiske funksjonen med skrive()-funksjonen. Vi bruker 'outFile.write' for å skrive innholdet til hvert 'Person'-objekt til filen. 'reinterpret_cast(&person1)' og 'reinterpret_cast(&person2)' konverterer hele 'Person'-strukturen (inkludert alle dens felt) til en kontinuerlig strøm av byte som er egnet for skriving til den binære filen . Vi skriver størrelsen på hvert 'Person'-objekt ved å bruke 'sizeof(person1)' og 'sizeof(person2)' for å sikre at alle data er skrevet riktig.



Etter å ha skrevet dataene på filen, er det svært viktig å lukke den ordentlig slik at ingen data går tapt på grunn av noen annen funksjon. Vi bruker outFile.close() for å frigjøre ressursene som er knyttet til filen og sikre at dataene er skrevet nøyaktig. Til slutt skriver vi ut en melding som bekrefter at dataene ble skrevet til den binære filen.

Hvis vi forklarer dette eksemplet i enklere termer, forestill deg en spesiell notatbok som bare kan lagre informasjon om mennesker på et hemmelig språk. Denne koden lager en blåkopi for å organisere informasjonen (navn, alder, høyde). Den åpner notatboken, fyller ut profilene for to personer, oversetter informasjonen til det hemmelige språket og skriver den pent inn. Den lukker deretter den bærbare datamaskinen sikkert, og bevarer profilene for fremtidig bruk. Se utdataene til programmet som er gitt i følgende øyeblikksbilde:

Metode 2: Skrive heltall til en binær fil

I denne metoden skrives en rekke heltall til en binær fil kalt 'integers.bin'. 'reinterpret_cast' behandler heltallsmatrisen som en sekvens av tegn (byte) for skriving inn i filen. Dette er spesielt viktig ettersom binære filer omhandler råbytedata. La oss ta en titt på følgende enkle eksempel:

#include

#include

int hoved- ( ) {

std :: av strømmen utfil ( 'integers.bin' , std :: ios :: binær ) ;

hvis ( ! utfil. er åpen ( ) ) {

std :: cerr << 'Feil! Kan ikke åpne filen for skriving!' << std :: endl ;

komme tilbake 1 ;

}

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

utfil. skrive ( reinterpret_cast < røye *> ( tall ) , størrelsen av ( tall ) ) ;

utfil. Lukk ( ) ;

std :: cout << 'De gitte heltallene ble skrevet til binærfilen vellykket.' << std :: endl ;

komme tilbake 0 ;

}

Her er en oversikt over koden med de spesifikke detaljene:

'#include ' og '#include ' bringer inn de nødvendige verktøyene for å jobbe med filer og skrive ut meldingene som henholdsvis cin og write(). 'std::ofstream outFile('integers.bin', std::ios::binær);' åpner en binær fil kalt 'integers.bin' som bare kan lagre tallene i en hemmelig kode (binært format). Den sjekker om filen er åpen. Ellers gis en feilmelding.

Den neste linjen som er 'int tall[] = {42, 99, -1, 0};' definerer en matrise kalt 'numbers' med heltall 42, 99, -1 og 0. 'outFile.write(reinterpret_cast(numbers), sizeof(numbers));' oversetter nøye heltallene til det binære formatet og skriver dem i filen 'integer.bin'. 'outFile.close();' lukker filen riktig for å holde heltallene trygge og organiserte. Til slutt skrives det ut en melding for å bekrefte at heltallene har blitt lagret i den binære filen. Se følgende utdata fra dette programmet for å se resultatet:

Konklusjon

Å skrive binære filer i C++ er en avgjørende ferdighet for å effektivt håndtere ulike typer data. I denne utforskningen av å skrive binære filer i C++, har vi lært hvordan 'ofstream'-klassen kan brukes til å håndtere binære data effektivt. Enten man arbeider med enkle heltall eller strukturerte data ved hjelp av tilpassede strukturer, innebærer prosessen å åpne en filstrøm, skrive dataene i binært format og deretter lukke filen. Denne evnen gir C++-utviklerne fleksibiliteten til å jobbe med et mangfoldig utvalg av binære datatyper, noe som bidrar til allsidigheten til språket i applikasjoner som spenner fra programmering på systemnivå til multimediabehandling.