Parašykite dvejetainį failą C++

Parasykite Dvejetaini Faila C



Programuojant C++, dvejetainių failų naudojimas yra esminis dalykas norint saugoti ir valdyti neapdorotus duomenis. Nesvarbu, ar dirbate su vaizdais, garso failais ar tinkintomis duomenų struktūromis, gebėjimas efektyviai rašyti dvejetainius failus yra labai svarbus. Dvejetainiai failai saugo duomenis žmogaus neįskaitomu formatu, todėl jie tinka įvairioms programoms, pvz., sudėtingoms struktūroms, vaizdams ar bet kokiems duomenims, kurie neatitinka paprasto teksto vaizdavimo, saugoti.

C++ suteikia biblioteką , skirtą sąveikauti su dvejetainiais failais, ypač su „ofstream“ klase, skirta dvejetainiams duomenims rašyti. Ši galimybė leidžia kūrėjams sklandžiai kurti, keisti ir valdyti dvejetainius failus. Šiame straipsnyje nagrinėjami įvairūs dvejetainių failų rašymo C++ metodai ir būdai, paaiškinamos jų programos ir naudojimo atvejai.

Parašykite dvejetainį failą naudodami C++

Norint išsaugoti duomenis į dvejetainį failą naudojant C++, naudojamas rašymo () metodas. Ši funkcija įrašo nurodytą skaičių baitų į nurodytą srautą, pradedant nuo „įdėjimo“ žymeklio vietos. Jei „įdėti“ rodyklė yra pabaigoje, failas išplečiamas. Tačiau nauji duomenys perrašo esamus simbolius, jei žymeklis yra faile. Jei rašymo metu įvyko klaida, srautas pažymimas kaip klaidos būsenos. Dabar pereikime prie pavyzdžių, kad sužinotume, kaip rašyti dvejetainiame faile naudojant keletą paprastų ir integruotų C++ funkcijų.







1 būdas: dvejetainių failų su struktūriniais duomenimis rašymas

Daugeliu atvejų gali tekti įrašyti struktūrinius duomenis, pvz., pasirinktines struktūras, į dvejetainį failą. Panagrinėkime pavyzdį, kuriame yra asmens įrašas, kuriame yra asmens vardas, ūgis ir amžius. Peržiūrėkite šį kodą ir peržiūrėkite paaiškinimą:



#include

#include

struktūra Asmuo {

char vardas [ penkiasdešimt ] ;

tarpt amžiaus ;

dvigubai aukščio ;

} ;

tarpt pagrindinis ( ) {

std :: už srauto outFile ( 'žmonės.bin' , std :: ios :: dvejetainis ) ;

jeigu ( ! outFile. atidarytas ( ) ) {

std :: cerr << 'Klaida! Nepavyko atidaryti failo rašymui!' << std :: endl ;

grąžinti 1 ;

}

Asmuo asmuo1 = { 'Kalsoom Ilyas' , 25 , 1.75 } ;

Asmuo asmuo2 = { 'Kalsoom Bajwa' , 30 , 1.68 } ;

outFile. rašyti ( reinterpret_cast < char *> ( & asmuo 1 ) , dydis ( asmuo 1 ) ) ;

outFile. rašyti ( reinterpret_cast < char *> ( & asmuo2 ) , dydis ( asmuo2 ) ) ;

outFile. Uždaryti ( ) ;

std :: cout << 'Asmens įrašas sėkmingai įrašytas į dvejetainį failą.' << std :: endl ;

grąžinti 0 ;

}

Čia pateikiamas kodo suskirstymas su konkrečia informacija. Programa pradedama apibrėžiant pasirinktinę struktūrą, pavadintą „Asmuo“. Jame yra trys laukai: vardas, amžius ir ūgis. Išsami informacija apie šiuos laukus yra tokia:



  • vardas: Eilutė, skirta išsaugoti asmens vardą (iki 50 simbolių)
  • amžius: Sveikasis skaičius, skirtas išsaugoti asmens amžių
  • aukštis: Dvigubas, skirtas išlaikyti asmens ūgį

Apibrėžus „Asmens“ struktūrą, paleidžiama pagrindinė funkcija, kuri yra programos įėjimo taškas. Pirmoje pagrindinės programos eilutėje atidaromas failas pavadinimu „people.bin“. Naudojame „std::ofstream“, kad sukurtume failą pavadinimu „people.bin“, kad būtų galima įrašyti duomenis dvejetainiu formatu. Labai svarbu patikrinti, ar failas sėkmingai atidaromas. Priešingu atveju bus rodomas klaidos pranešimas ir programa sustos. Taigi, naudodamiesi sąlyga „if“ ir funkcija is_open (), patikriname, ar failas atidarytas sėkmingai, ar ne.





Čia sukuriami du „Asmens“ objektai. Mes apibrėžiame du kintamuosius „person1“ ir „person2“ tipo „Person“. „Kalsoom Ilyas“ ir „Kalsoom Bajwa“ priskiriame kintamųjų pavadinimą, amžių ir ūgį.

Dabar, kai turime duomenų, kuriuos reikia įrašyti į dvejetainį failą, atlikime tikrąją funkciją naudodami funkciją write (). Mes naudojame 'outFile.write', norėdami įrašyti kiekvieno objekto 'Person' turinį į failą. „Reinterpret_cast(&person1)“ ir „reinterpret_cast(&person2)“ paverčia visą „Person“ struktūrą (įskaitant visus jos laukus) į nenutrūkstamą baitų srautą, tinkantį rašyti į dvejetainį failą. . Kiekvieno objekto „Asmuo“ dydį įrašome naudodami „sizeof(person1)“ ir „sizeof(person2)“, kad įsitikintume, jog visi duomenys yra parašyti teisingai.



Įrašius duomenis į failą, labai svarbu jį tinkamai uždaryti, kad jokie duomenys nepasimestų dėl kokios nors kitos funkcijos. Naudojame outFile.close(), kad išleistume su failu susietus išteklius ir užtikrintume, kad duomenys būtų parašyti tiksliai. Galiausiai išspausdiname pranešimą, patvirtinantį, kad duomenys sėkmingai įrašyti į dvejetainį failą.

Jei šį pavyzdį paaiškinsime paprasčiau, įsivaizduokite specialų sąsiuvinį, kuriame informacija apie žmones gali būti saugoma tik slapta kalba. Šis kodas sukuria planą informacijai (vardas, amžius, ūgis) sutvarkyti. Jis atidaro sąsiuvinį, užpildo dviejų žmonių anketas, išverčia informaciją į slaptą kalbą ir tvarkingai įrašo viduje. Tada jis saugiai uždaro nešiojamąjį kompiuterį, išsaugodamas profilius būsimam naudojimui. Peržiūrėkite programos išvestį, pateiktą šioje momentinėje nuotraukoje:

2 būdas: sveikųjų skaičių įrašymas į dvejetainį failą

Taikant šį metodą sveikųjų skaičių masyvas įrašomas į dvejetainį failą, pavadintą 'integers.bin'. „Reinterpret_cast“ sveikųjų skaičių masyvą traktuoja kaip simbolių (baitų) seką, skirtą įrašyti į failą. Tai ypač svarbu, nes dvejetainiai failai yra susiję su neapdorotais baitų duomenimis. Pažvelkime į tokį paprastą pavyzdį:

#include

#include

tarpt pagrindinis ( ) {

std :: už srauto outFile ( 'integers.bin' , std :: ios :: dvejetainis ) ;

jeigu ( ! outFile. atidarytas ( ) ) {

std :: cerr << 'Klaida! Nepavyko atidaryti failo rašymui!' << std :: endl ;

grąžinti 1 ;

}

tarpt numeriai [ ] = { 42 , 99 , - 1 , 0 } ;

outFile. rašyti ( reinterpret_cast < char *> ( numeriai ) , dydis ( numeriai ) ) ;

outFile. Uždaryti ( ) ;

std :: cout << 'Duoti sveikieji skaičiai sėkmingai įrašyti į dvejetainį failą.' << std :: endl ;

grąžinti 0 ;

}

Štai kodo suskirstymas su konkrečia informacija:

„#include “ ir „#include “ pateikia reikalingus įrankius darbui su failais ir pranešimams spausdinti, pvz., atitinkamai cin ir write (). 'std::ofstream outFile('integers.bin', std::ios::binary);' atidaro dvejetainį failą, pavadintą 'integers.bin', kuris gali saugoti skaičius tik slaptu kodu (dvejetainiu formatu). Jis patikrina, ar failas atidarytas. Priešingu atveju pateikiamas klaidos pranešimas.

Kita eilutė, kuri yra „int numbers[] = {42, 99, -1, 0};“ apibrėžia masyvą pavadinimu 'skaičiai' su sveikaisiais skaičiais 42, 99, -1 ir 0. 'outFile.write(reinterpret_cast(numbers), sizeof(numbers));' atsargiai išverčia sveikuosius skaičius į dvejetainį formatą ir įrašo juos į failą „integer.bin“. „outFile.close();“ tinkamai uždaro failą, kad sveikieji skaičiai būtų saugūs ir tvarkingi. Galiausiai išspausdinamas pranešimas, patvirtinantis, kad sveikieji skaičiai buvo sėkmingai išsaugoti dvejetainiame faile. Norėdami pamatyti rezultatą, žr. toliau pateiktą šios programos išvestį:

Išvada

Dvejetainių failų rašymas C++ yra esminis įgūdis norint efektyviai tvarkyti įvairių tipų duomenis. Tyrinėdami dvejetainių failų rašymą C++ kalba, sužinojome, kaip efektyviai tvarkyti dvejetainius duomenis galima panaudoti „ofstream“ klasę. Nesvarbu, ar dirbate su paprastais sveikaisiais skaičiais, ar su struktūriniais duomenimis, naudojant pasirinktines struktūras, procesas apima failų srauto atidarymą, duomenų įrašymą dvejetainiu formatu ir failo uždarymą. Ši galimybė suteikia C++ kūrėjams lankstumo dirbti su įvairiais dvejetainiais duomenų tipais, taip prisidedant prie kalbos universalumo programose, kurios svyruoja nuo sistemos lygio programavimo iki daugialypės terpės apdorojimo.