Scrivi un file binario in C++

Scrivi Un File Binario In C



Nella programmazione C++, gestire i file binari è fondamentale per archiviare e manipolare i dati grezzi. Sia che tu stia lavorando con immagini, file audio o strutture dati personalizzate, la capacità di scrivere i file binari in modo efficiente è fondamentale. I file binari memorizzano i dati in un formato non leggibile dall'uomo, rendendoli adatti a varie applicazioni come la memorizzazione di strutture complesse, immagini o qualsiasi dato che non segua una semplice rappresentazione basata su testo.

C++ fornisce la libreria per interagire con i file binari, in particolare la classe 'ofstream', per scrivere i dati binari. Questa funzionalità consente agli sviluppatori di creare, modificare e gestire senza problemi i file binari. Questo articolo esplora i vari metodi e tecniche per scrivere file binari in C++, facendo luce sulle loro applicazioni e casi d'uso.

Scrivere un file binario utilizzando C++

Per salvare i dati in un file binario utilizzando C++, viene utilizzato il metodo write(). Questa funzione scrive un numero specificato di byte nel flusso designato, iniziando dalla posizione del puntatore 'put'. Se il puntatore 'put' è alla fine, il file viene esteso. Tuttavia, i nuovi dati sovrascrivono i caratteri esistenti se il puntatore si trova all'interno del file. In caso di errore durante il processo di scrittura, lo stream viene contrassegnato come in stato di errore. Passiamo ora agli esempi per imparare a scrivere in un file binario utilizzando alcune funzioni semplici e integrate in C++.







Metodo 1: scrivere file binari con dati strutturati

In molti casi potrebbe essere necessario scrivere dati strutturati, ad esempio strutture personalizzate, in un file binario. Consideriamo un esempio che contiene un record di una persona che include il nome, l'altezza e l'età di una persona. Vedi il codice seguente e dai un'occhiata alla spiegazione:



#include

#include

struttura Persona {

car nome [ cinquanta ] ;

int età ;

Doppio altezza ;

} ;

int principale ( ) {

standard :: ofstream outFile ( 'persone.bin' , standard :: ios :: binario ) ;

Se ( ! outFile. è aperto ( ) ) {

standard :: cerr << 'Errore! Impossibile aprire il file per la scrittura!' << standard :: fine ;

ritorno 1 ;

}

Persona persona1 = { 'Kalsom Ilyas' , 25 , 1,75 } ;

Persona persona2 = { 'Kalsom Bajwa' , 30 , 1,68 } ;

outFile. scrivere ( reinterpret_cast < car *> ( & persona 1 ) , taglia di ( persona 1 ) ) ;

outFile. scrivere ( reinterpret_cast < car *> ( & persona2 ) , taglia di ( persona2 ) ) ;

outFile. vicino ( ) ;

standard :: cout << 'Il record della persona è stato scritto correttamente nel file binario.' << standard :: fine ;

ritorno 0 ;

}

Ecco una ripartizione del codice con i dettagli specifici. Il programma inizia con la definizione di una struttura personalizzata denominata 'Persona'. Ha tre campi: nome, età e altezza. I dettagli di questi campi sono i seguenti:



  • nome: Una stringa per memorizzare il nome della persona (fino a 50 caratteri)
  • età: Un numero intero per memorizzare l'età della persona
  • altezza: Un doppio per memorizzare l’altezza della persona

Dopo aver definito la struttura “Persona”, si avvia la funzione principale che costituisce il punto di ingresso del programma. La prima riga del programma principale apre un file denominato 'people.bin'. Usiamo 'std::ofstream' per creare un file denominato 'people.bin' per scrivere i dati in formato binario. Controllare se il file si apre correttamente è molto importante. In caso contrario, viene visualizzato un messaggio di errore e il programma si arresta. Quindi, con l'aiuto della condizione 'if' e della funzione is_open(), controlliamo se il file è stato aperto correttamente o meno.





Qui vengono creati i due oggetti “Persona”. Definiamo due variabili, “person1” e “person2”, di tipo “Person”. Assegniamo i valori del nome, dell'età e dell'altezza della variabile per 'Kalsoom Ilyas' e 'Kalsoom Bajwa'.

Ora che abbiamo i dati da scrivere in un file binario, eseguiamo la funzione vera e propria con la funzione write(). Usiamo 'outFile.write' per scrivere il contenuto di ciascun oggetto 'Person' nel file. 'reinterpret_cast(&person1)' e 'reinterpret_cast(&person2)' convertono l'intera struttura 'Person' (compresi tutti i suoi campi) in un flusso continuo di byte adatto per la scrittura nel file binario . Scriviamo la dimensione di ciascun oggetto 'Persona' utilizzando 'sizeof(person1)' e 'sizeof(person2)' per garantire che tutti i dati siano scritti correttamente.



Dopo aver scritto i dati sul file, è molto importante chiuderlo correttamente in modo che nessun dato venga perso a causa di altre funzioni. Utilizziamo outFile.close() per rilasciare le risorse associate al file e garantire che i dati vengano scritti in modo accurato. Infine, stampiamo un messaggio che conferma la corretta scrittura dei dati nel file binario.

Se spieghiamo questo esempio in termini più semplici, immaginiamo un taccuino speciale che possa memorizzare solo informazioni sulle persone in una lingua segreta. Questo codice crea un modello per organizzare le informazioni (nome, età, altezza). Apre il taccuino, compila i profili di due persone, traduce le informazioni nella lingua segreta e le scrive ordinatamente all'interno. Chiude quindi il notebook in modo sicuro, preservando i profili per un utilizzo futuro. Fare riferimento all'output del programma fornito nella seguente istantanea:

Metodo 2: scrivere numeri interi in un file binario

In questo metodo, un array di numeri interi viene scritto in un file binario denominato 'integers.bin'. Il 'reinterpret_cast' tratta l'array di numeri interi come una sequenza di caratteri (byte) da scrivere nel file. Ciò è particolarmente importante poiché i file binari gestiscono dati byte grezzi. Diamo un’occhiata al seguente semplice esempio:

#include

#include

int principale ( ) {

standard :: ofstream outFile ( 'interi.bin' , standard :: ios :: binario ) ;

Se ( ! outFile. è aperto ( ) ) {

standard :: cerr << 'Errore! Impossibile aprire il file per la scrittura!' << standard :: fine ;

ritorno 1 ;

}

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

outFile. scrivere ( reinterpret_cast < car *> ( numeri ) , taglia di ( numeri ) ) ;

outFile. vicino ( ) ;

standard :: cout << 'I numeri interi specificati sono stati scritti correttamente nel file binario.' << standard :: fine ;

ritorno 0 ;

}

Ecco una ripartizione del codice con i dettagli specifici:

'#include ' e '#include ' introducono gli strumenti necessari per lavorare con i file e stampare i messaggi come cin e write(), rispettivamente. Il file 'std::ofstream outFile('integers.bin', std::ios::binary);' apre un file binario denominato “integers.bin” che può memorizzare solo i numeri in un codice segreto (formato binario). Controlla se il file è aperto. Altrimenti viene dato un messaggio di errore.

La riga successiva che è 'int numeri[] = {42, 99, -1, 0};' definisce un array denominato 'numeri' con i numeri interi 42, 99, -1 e 0. 'outFile.write(reinterpret_cast(numeri), sizeof(numeri));' traduce attentamente gli interi nel formato binario e li scrive nel file “integer.bin”. Il file 'outFile.close();' chiude il file correttamente per mantenere i numeri interi sicuri e organizzati. Infine, viene stampato un messaggio per confermare che gli interi sono stati memorizzati con successo nel file binario. Fare riferimento al seguente output di questo programma per vedere il risultato:

Conclusione

Scrivere file binari in C++ è un'abilità cruciale per gestire in modo efficiente i vari tipi di dati. In questa esplorazione della scrittura di file binari in C++, abbiamo imparato come utilizzare la classe 'ofstream' per gestire i dati binari in modo efficiente. Sia che si tratti di numeri interi semplici o di dati strutturati utilizzando strutture personalizzate, il processo prevede l'apertura di un flusso di file, la scrittura dei dati in formato binario e quindi la chiusura del file. Questa funzionalità fornisce agli sviluppatori C++ la flessibilità necessaria per lavorare con una vasta gamma di tipi di dati binari, contribuendo alla versatilità del linguaggio in applicazioni che vanno dalla programmazione a livello di sistema all'elaborazione multimediale.