Írjon bináris fájlt C++ nyelven

Irjon Binaris Fajlt C Nyelven



A C++ programozásban a bináris fájlok kezelése alapvető fontosságú a nyers adatok tárolásához és kezeléséhez. Függetlenül attól, hogy képekkel, hangfájlokkal vagy egyéni adatstruktúrákkal dolgozik, a bináris fájlok hatékony írásának képessége kulcsfontosságú. A bináris fájlok ember által nem olvasható formátumban tárolják az adatokat, így alkalmasak különféle alkalmazásokra, például összetett struktúrák, képek tárolására, vagy bármilyen olyan adat tárolására, amely nem követ egyszerű szöveges megjelenítést.

A C++ biztosítja az könyvtárat a bináris fájlokkal való interakcióhoz, különösen az „ofstream” osztályhoz a bináris adatok írásához. Ez a képesség lehetővé teszi a fejlesztők számára a bináris fájlok zökkenőmentes létrehozását, módosítását és kezelését. Ez a cikk a bináris fájlok C++ nyelven történő írásának különböző módszereit és technikáit vizsgálja, megvilágítva azok alkalmazásait és használati eseteit.

Írjon bináris fájlt a C++ használatával

Az adatok C++ használatával bináris fájlba mentéséhez a write() metódust alkalmazzuk. Ez a függvény meghatározott számú bájtot ír a kijelölt adatfolyamba, a „put” mutató helyétől kezdve. Ha a „put” mutató a végén van, a fájl kiterjesztésre kerül. Az új adatok azonban felülírják a meglévő karaktereket, ha a mutató a fájlon belül van. Ha az írási folyamat során hiba történik, az adatfolyamot hibaállapotúként jelöli meg. Most menjünk tovább a példákra, hogy megtanuljuk, hogyan írjunk bináris fájlba néhány egyszerű és beépített C++ függvény segítségével.







1. módszer: Bináris fájlok írása strukturált adatokkal

Sok esetben előfordulhat, hogy strukturált adatokat, például egyéni struktúrákat kell írnia egy bináris fájlba. Vegyünk egy példát, amely egy személy rekordját tartalmazza, amely tartalmazza egy személy nevét, magasságát és életkorát. Tekintse meg a következő megadott kódot, és nézze meg a magyarázatot:



#include

#include

struct Személy {

char név [ ötven ] ;

int kor ;

kettős magasság ;

} ;

int fő- ( ) {

std :: folyamon kívül outFile ( 'people.bin' , std :: ios :: bináris ) ;

ha ( ! outFile. nyitva van ( ) ) {

std :: cerr << 'Hiba! Nem lehet megnyitni a fájlt íráshoz!' << std :: endl ;

Visszatérés 1 ;

}

Személy személy1 = { 'Kalsoom Ilyas' , 25 , 1.75 } ;

Személy személy2 = { 'Kalsoom Bajwa' , 30 , 1.68 } ;

outFile. ír ( reinterpret_cast < char *> ( & személy 1 ) , mérete ( személy 1 ) ) ;

outFile. ír ( reinterpret_cast < char *> ( & személy2 ) , mérete ( személy2 ) ) ;

outFile. Bezárás ( ) ;

std :: cout << 'A személy rekordja sikeresen beírásra került bináris fájlba.' << std :: endl ;

Visszatérés 0 ;

}

Itt található a kód lebontása a konkrét részletekkel. A program egy „Személy” nevű egyéni struktúra meghatározásával kezdődik. Három mezője van: név, életkor és magasság. E mezők részletei a következők:



  • név: Egy karakterlánc a személy nevének tárolására (legfeljebb 50 karakter)
  • kor: Egész szám a személy életkorának tárolására
  • magasság: Dupla a személy magasságának tárolására

A „Személy” struktúra meghatározása után elindul a fő funkció, amely a program belépési pontja. A főprogram első sora megnyit egy „people.bin” nevű fájlt. Az „std::ofstream” használatával létrehozunk egy „people.bin” nevű fájlt az adatok bináris formátumban történő írásához. Nagyon fontos ellenőrizni, hogy a fájl sikeresen megnyílik-e. Ellenkező esetben hibaüzenet jelenik meg, és a program leáll. Ezért az „if” feltétel és az is_open() függvény segítségével ellenőrizzük, hogy a fájl sikeresen megnyílt-e vagy sem.





Itt jön létre a két „Személy” objektum. Két változót határozunk meg, a „személy1” és a „személy2” „Személy” típusú. A „Kalsoom Ilyas” és a „Kalsoom Bajwa” változók nevét, korát és magasságát hozzárendeljük.

Most, hogy megvannak a bináris fájlba írandó adatok, hajtsuk végre a tényleges függvényt a write() függvénnyel. Az „outFile.write” segítségével minden „Person” objektum tartalmát a fájlba írjuk. A „reinterpret_cast(&person1)” és „reinterpret_cast(&person2)” a teljes „Person” struktúrát (az összes mezővel együtt) egy folyamatos bájtfolyammá alakítja, amely alkalmas a bináris fájlba való írásra. . Minden egyes „Személy” objektum méretét a „sizeof(person1)” és a „sizeof(person2)” használatával írjuk le, hogy biztosítsuk az összes adat helyes írását.



Az adatok fájlba írása után nagyon fontos, hogy megfelelően zárjuk be, hogy semmilyen más funkció miatt ne vesszen el adat. Az outFile.close() segítségével felszabadítjuk a fájlhoz társított erőforrásokat, és biztosítjuk az adatok pontos írását. Végül kinyomtatunk egy üzenetet, amely megerősíti az adatok sikeres írását a bináris fájlba.

Ha ezt a példát egyszerűbben magyarázzuk, képzeljünk el egy speciális jegyzetfüzetet, amely csak titkos nyelven képes információkat tárolni az emberekről. Ez a kód tervezetet készít az információk (név, életkor, magasság) rendszerezéséhez. Kinyitja a jegyzetfüzetet, kitölti két személy profilját, lefordítja az információkat a titkos nyelvre, és szépen beleírja. Ezután biztonságosan lezárja a notebookot, megőrzi a profilokat későbbi használatra. Tekintse meg a program kimenetét, amely a következő pillanatképen látható:

2. módszer: Egész számok írása bináris fájlba

Ebben a módszerben egy egész számok tömbje egy „integers.bin” nevű bináris fájlba kerül. A „reinterpret_cast” az egész szám tömböt karakterek (bájtok) sorozataként kezeli a fájlba íráshoz. Ez különösen fontos, mivel a bináris fájlok nyers bájtadatokkal foglalkoznak. Nézzük a következő egyszerű példát:

#include

#include

int fő- ( ) {

std :: folyamon kívül outFile ( 'integers.bin' , std :: ios :: bináris ) ;

ha ( ! outFile. nyitva van ( ) ) {

std :: cerr << 'Hiba! Nem lehet megnyitni a fájlt íráshoz!' << std :: endl ;

Visszatérés 1 ;

}

int számok [ ] = { 42 , 99 , - 1 , 0 } ;

outFile. ír ( reinterpret_cast < char *> ( számok ) , mérete ( számok ) ) ;

outFile. Bezárás ( ) ;

std :: cout << 'A megadott egész számok sikeresen beírva a bináris fájlba.' << std :: endl ;

Visszatérés 0 ;

}

Íme a kód lebontása a konkrét részletekkel:

Az „#include ” és „#include ” hozzák a szükséges eszközöket a fájlokkal való munkához és az üzenetek kinyomtatásához, mint például a cin és a write(). Az „std::ofstream outFile(“integers.bin”, std::ios::binary);” megnyit egy „integers.bin” nevű bináris fájlt, amely csak titkos kódban (bináris formátumban) tudja tárolni a számokat. Ellenőrzi, hogy a fájl nyitva van-e. Ellenkező esetben hibaüzenet jelenik meg.

A következő sor: „int numbers[] = {42, 99, -1, 0};” egy „numbers” nevű tömböt határoz meg 42, 99, -1 és 0 egész számokkal. Az „outFile.write(reinterpret_cast(numbers), sizeof(numbers));” gondosan lefordítja az egész számokat bináris formátumba, és beírja az „integer.bin” fájlba. Az „outFile.close();” megfelelően bezárja a fájlt, hogy az egész számokat biztonságban és rendszerezetten tartsa. Végül egy üzenet kerül kinyomtatásra, amely megerősíti, hogy az egész számokat sikeresen elmentette a bináris fájl. Az eredmény megtekintéséhez tekintse meg a program következő kimenetét:

Következtetés

A bináris fájlok írása C++ nyelven kulcsfontosságú készség a különféle típusú adatok hatékony kezeléséhez. A bináris fájlok C++ nyelven történő írásának ebben a feltárásában megtanultuk, hogyan használható az „ofstream” osztály a bináris adatok hatékony kezelésére. Legyen szó egyszerű egész számokról vagy egyéni struktúrákat használó strukturált adatokról, a folyamat magában foglalja egy fájlfolyam megnyitását, az adatok bináris formátumban történő írását, majd a fájl bezárását. Ez a képesség rugalmasságot biztosít a C++ fejlesztők számára a bináris adattípusok széles skálájával való munkához, hozzájárulva a nyelv sokoldalúságához a rendszerszintű programozástól a multimédiás feldolgozásig terjedő alkalmazásokban.