Napište binární soubor v C++

Napiste Binarni Soubor V C



V programování C++ je práce s binárními soubory zásadní pro ukládání a manipulaci s nezpracovanými daty. Ať už pracujete s obrázky, zvukovými soubory nebo vlastními datovými strukturami, schopnost efektivně zapisovat binární soubory je klíčová. Binární soubory ukládají data ve formátu, který není čitelný pro člověka, díky čemuž jsou vhodné pro různé aplikace, jako je ukládání složitých struktur, obrázků nebo jakýchkoli dat, která se neřídí jednoduchou textovou reprezentací.

C++ poskytuje knihovnu pro interakci s binárními soubory, zejména s třídou „ofstream“, pro zápis binárních dat. Tato schopnost umožňuje vývojářům bezproblémově vytvářet, upravovat a spravovat binární soubory. Tento článek zkoumá různé metody a techniky pro psaní binárních souborů v C++, osvětluje jejich aplikace a případy použití.

Napište binární soubor pomocí C++

K uložení dat do binárního souboru pomocí C++ se používá metoda write(). Tato funkce zapíše určený počet bajtů do určeného proudu, počínaje umístěním ukazatele „put“. Pokud je ukazatel „put“ na konci, soubor je rozšířen. Nová data však přepíší existující znaky, pokud je ukazatel v souboru. V případě chyby během procesu zápisu je stream označen jako v chybovém stavu. Nyní přejdeme k příkladům, abychom se naučili zapisovat do binárního souboru pomocí některých jednoduchých a vestavěných funkcí C++.







Metoda 1: Zápis binárních souborů se strukturovanými daty

V mnoha případech možná budete muset zapsat strukturovaná data, jako jsou vlastní struktury, do binárního souboru. Podívejme se na příklad, který obsahuje záznam osoby, která obsahuje jméno, výšku a věk osoby. Podívejte se na následující daný kód a podívejte se na vysvětlení:



#include

#include

strukturovat Osoba {

char název [ padesáti ] ;

int stáří ;

dvojnásobek výška ;

} ;

int hlavní ( ) {

std :: ofstream outFile ( 'people.bin' , std :: ios :: binární ) ;

-li ( ! outFile. je otevřeno ( ) ) {

std :: cerr << 'Chyba! Nelze otevřít soubor pro zápis!' << std :: endl ;

vrátit se 1 ;

}

Osoba osoba 1 = { 'Kalsoom Ilyas' , 25 , 1,75 } ;

Osoba osoba 2 = { 'Kalsoom Bajwa' , 30 , 1,68 } ;

outFile. napsat ( reinterpret_cast < char *> ( & osoba 1 ) , velikost ( osoba 1 ) ) ;

outFile. napsat ( reinterpret_cast < char *> ( & osoba2 ) , velikost ( osoba2 ) ) ;

outFile. zavřít ( ) ;

std :: cout << 'Záznam osoby je úspěšně zapsán do binárního souboru.' << std :: endl ;

vrátit se 0 ;

}

Zde je rozpis kódu s konkrétními detaily. Program začíná definováním vlastní struktury s názvem „Person“. Má tři pole: jméno, věk a výšku. Podrobnosti o těchto polích jsou následující:



  • název: Řetězec pro uložení jména osoby (až 50 znaků)
  • stáří: Celé číslo pro uložení věku osoby
  • výška: Dvojité pro uložení výšky osoby

Po definování struktury „Person“ se spustí hlavní funkce, která je vstupním bodem programu. První řádek v hlavním programu otevře soubor s názvem „people.bin“. „Std::ofstream“ používáme k vytvoření souboru s názvem „people.bin“ pro zápis dat v binárním formátu. Kontrola, zda se soubor úspěšně otevře, je velmi důležitá. V opačném případě se zobrazí chybové hlášení a program se zastaví. Pomocí podmínky „if“ a funkce is_open() tedy zkontrolujeme, zda se soubor úspěšně otevřel nebo ne.





Zde se vytvoří dva objekty „Osoba“. Definujeme dvě proměnné, „person1“ a „person2“, typu „Person“. Proměnným přiřadíme název, věk a výšku pro „Kalsoom Ilyas“ a „Kalsoom Bajwa“.

Nyní, když máme data k zápisu do binárního souboru, proveďte skutečnou funkci pomocí funkce write(). K zápisu obsahu každého objektu „Person“ do souboru používáme „outFile.write“. Funkce „reinterpret_cast(&person1)“ a „reinterpret_cast(&person2)“ převádějí celou strukturu „Person“ (včetně všech jejích polí) na nepřetržitý proud bajtů, který je vhodný pro zápis do binárního souboru. . Velikost každého objektu „Person“ zapisujeme pomocí „sizeof(person1)“ a „sizeof(person2)“, abychom zajistili, že všechna data jsou zapsána správně.



Po zápisu dat do souboru je velmi důležité jej řádně zavřít, aby se žádná data neztratila v důsledku jiné funkce. Pomocí outFile.close() uvolníme prostředky, které jsou k souboru přidruženy, a zajistíme, že data budou zapsána přesně. Nakonec vytiskneme zprávu, která potvrdí úspěšný zápis dat do binárního souboru.

Pokud tento příklad vysvětlíme jednodušeji, představte si speciální zápisník, do kterého lze ukládat pouze informace o lidech v tajném jazyce. Tento kód vytváří plán pro uspořádání informací (jméno, věk, výška). Otevře sešit, vyplní profily pro dvě osoby, přeloží informace do tajného jazyka a zapíše je úhledně dovnitř. Poté notebook bezpečně zavře a zachová profily pro budoucí použití. Podívejte se na výstup programu, který je uveden na následujícím snímku:

Metoda 2: Zápis celých čísel do binárního souboru

Při této metodě je pole celých čísel zapsáno do binárního souboru s názvem „integers.bin“. „reinterpret_cast“ zachází s celočíselným polem jako s posloupností znaků (bajtů) pro zápis do souboru. To je zvláště důležité, protože binární soubory pracují s nezpracovanými daty bajtů. Podívejme se na následující jednoduchý příklad:

#include

#include

int hlavní ( ) {

std :: ofstream outFile ( 'integers.bin' , std :: ios :: binární ) ;

-li ( ! outFile. je otevřeno ( ) ) {

std :: cerr << 'Chyba! Nelze otevřít soubor pro zápis!' << std :: endl ;

vrátit se 1 ;

}

int čísla [ ] = { 42 , 99 , - 1 , 0 } ;

outFile. napsat ( reinterpret_cast < char *> ( čísla ) , velikost ( čísla ) ) ;

outFile. zavřít ( ) ;

std :: cout << 'Daná celá čísla byla úspěšně zapsána do binárního souboru.' << std :: endl ;

vrátit se 0 ;

}

Zde je rozpis kódu s konkrétními podrobnostmi:

„#include “ a „#include “ přinášejí potřebné nástroje pro práci se soubory a tisk zpráv, jako je cin a write(). The 'std::ofstream outFile('integers.bin', std::ios::binary);' otevře binární soubor s názvem „integers.bin“, který může ukládat čísla pouze v tajném kódu (binární formát). Zkontroluje, zda je soubor otevřený. V opačném případě se zobrazí chybová zpráva.

Další řádek, který je „int čísla[] = {42, 99, -1, 0};“ definuje pole s názvem „numbers“ s celými čísly 42, 99, -1 a 0. The „outFile.write(reinterpret_cast(numbers), sizeof(numbers));“ pečlivě převede celá čísla do binárního formátu a zapíše je do souboru „integer.bin“. „outFile.close();“ zavře soubor správně, aby byla celá čísla bezpečná a organizovaná. Nakonec se vytiskne zpráva, která potvrdí, že celá čísla byla úspěšně uložena do binárního souboru. Podívejte se na následující výstup tohoto programu, abyste viděli výsledek:

Závěr

Zápis binárních souborů v C++ je klíčovou dovedností pro efektivní zpracování různých typů dat. Při tomto zkoumání psaní binárních souborů v C++ jsme se naučili, jak lze třídu „ofstream“ využít k efektivnímu zpracování binárních dat. Ať už se jedná o jednoduchá celá čísla nebo strukturovaná data pomocí vlastních struktur, proces zahrnuje otevření datového proudu souboru, zápis dat v binárním formátu a pak zavření souboru. Tato schopnost poskytuje vývojářům C++ flexibilitu při práci s rozmanitou škálou binárních datových typů, což přispívá k všestrannosti jazyka v aplikacích, které sahají od programování na systémové úrovni až po zpracování multimédií.