C++ Gestione dei file: come aprire, scrivere, leggere e chiudere i file in C++

In cosa consiste la gestione dei file C++?

I file archiviano i dati in modo permanente in un dispositivo di archiviazione. Con la gestione dei file, l'output di un programma può essere memorizzato in un file. È possibile eseguire varie operazioni sui dati nel file.

Uno stream è un'astrazione di un dispositivo in cui vengono eseguite operazioni di input/output. È possibile rappresentare uno stream come destinazione o sorgente di caratteri di lunghezza indefinita. Ciò sarà determinato dal loro utilizzo. C++ fornisce una libreria fornita di metodi per la gestione dei file. Discutiamone.

La Biblioteca fstream

La libreria fstream fornisce C++ programmatori con tre classi per lavorare con i file. Queste classi includono:

  • di corrente– Questa classe rappresenta un flusso di output. Viene utilizzato per creare file e scrivere informazioni sui file.
  • ifstream– Questa classe rappresenta un flusso di input. Viene utilizzato per leggere informazioni da file di dati.
  • fstream– Questa classe rappresenta generalmente un flusso di file. Viene fornito con funzionalità ofstream/ifstream. Ciò significa che è in grado di creare file, scrivere su file, leggere da file di dati.

L'immagine seguente lo rende semplice da capire:

libreria fstream
libreria fstream

Per utilizzare le classi precedenti della libreria fstream, è necessario includerle nel programma come file di intestazione. Naturalmente utilizzerai la direttiva del preprocessore #include. È necessario includere anche il file di intestazione iostream.

Come aprire i file

Prima di eseguire qualsiasi operazione su un file, è necessario prima aprirlo. Se è necessario scrivere sul file, aprirlo utilizzando oggetti fstream o ofstream. Se hai solo bisogno di leggere dal file, aprilo utilizzando l'oggetto ifstream.

I tre oggetti, ovvero fstream, ofstream e ifstream, hanno la funzione open() definita al loro interno. La funzione assume questa sintassi:

open (file_name, mode);
  • Il parametro file_name indica il nome del file da aprire.
  • Il parametro mode è facoltativo. Può assumere uno qualsiasi dei seguenti valori:
Valore Descrizione
ios:: app La modalità Aggiungi. L'output inviato al file viene aggiunto ad esso.
ios::mangiato Apre il file per l'output, quindi sposta il controllo di lettura e scrittura alla fine del file.
ios::in Apre il file per la lettura.
ios::fuori Apre il file per una scrittura.
ios::tronc Se esiste un file, gli elementi del file devono essere troncati prima della sua apertura.

È possibile utilizzare due modalità contemporaneamente. Li combini usando | (OR) operatore.

Esempio 1:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file", ios::out);
	if (!my_file) {
		cout << "File not created!";
	}
	else {
		cout << "File created successfully!";
		my_file.close(); 
	}
	return 0;
}

Produzione:

Apri file

Ecco uno screenshot del codice:

Apri file

Spiegazione del codice:

  1. Includere il file di intestazione iostream nel programma per utilizzare le sue funzioni.
  2. Includere il file di intestazione fstream nel programma per utilizzare le sue classi.
  3. Includi lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
  4. Chiama la funzione main(). La logica del programma dovrebbe rientrare nel suo corpo.
  5. Crea un oggetto della classe fstream e dagli il nome my_file.
  6. Applica la funzione open() sull'oggetto sopra per creare un nuovo file. La modalità out ci consente di scrivere nel file.
  7. Utilizzare l'istruzione if per verificare se la creazione del file non è riuscita.
  8. Messaggio da stampare sulla console se il file non è stato creato.
  9. Fine del corpo dell'istruzione if.
  10. Utilizzare un'istruzione else per indicare cosa fare se il file è stato creato.
  11. Messaggio da stampare sulla console se il file è stato creato.
  12. Applicare la funzione close() sull'oggetto per chiudere il file.
  13. Fine del corpo dell'istruzione else.
  14. Il programma deve restituire un valore se viene completato correttamente.
  15. Fine del corpo della funzione main().

Come chiudere i file

Una volta a C++ Programma termina automaticamente

  • inonda i ruscelli
  • rilascia la memoria allocata
  • chiude i file aperti.

Tuttavia, come programmatore, dovresti imparare a chiudere i file aperti prima che il programma termini.

Gli oggetti fstream, ofstream e ifstream hanno la funzione close() per chiudere i file. La funzione assume questa sintassi:

void close();

Come scrivere su file

Puoi scrivere su file direttamente dal tuo C++ programma. Per questo si usa l'operatore di inserimento del flusso (<<). Il testo da scrivere nel file deve essere racchiuso tra virgolette doppie.

Dimostriamolo.

Esempio 2:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file.txt", ios::out);
	if (!my_file) {
		cout << "File not created!";
	}
	else {
		cout << "File created successfully!";
		my_file << "Guru99";
		my_file.close();
	}
	return 0;
}

Produzione:

Come scrivere su file

Ecco uno screenshot del codice:

Come scrivere su file

Spiegazione del codice:

  1. Includere il file di intestazione iostream nel programma per utilizzare le sue funzioni.
  2. Includere il file di intestazione fstream nel programma per utilizzare le sue classi.
  3. Includere lo spazio dei nomi std nel programma per utilizzare le sue classi senza chiamarlo.
  4. Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta al corpo di questa funzione.
  5. Crea un'istanza della classe fstream e dagli il nome my_file.
  6. Utilizza la funzione open() per creare un nuovo file denominato my_file.txt. Il file verrà aperto in modalità uscita per la scrittura al suo interno.
  7. Utilizzare un'istruzione if per verificare se il file non è stato aperto.
  8. Testo da stampare sulla console se il file non è aperto.
  9. Fine del corpo dell'istruzione if.
  10. Utilizzare un'istruzione else per indicare cosa fare se il file è stato creato.
  11. Testo da stampare sulla console se il file è stato creato.
  12. Scrivi del testo nel file creato.
  13. Utilizzare la funzione close() per chiudere il file.
  14. Fine del corpo dell'istruzione else.
  15. Il programma deve restituire valore in caso di completamento positivo.
  16. Fine del corpo della funzione main().

Come leggere dai file

Puoi leggere le informazioni dai file nel tuo C++ programma. Ciò è possibile utilizzando l'operatore di estrazione del flusso (>>). Si utilizza l'operatore nello stesso modo in cui lo si utilizza per leggere l'input dell'utente dalla tastiera. Tuttavia, invece di utilizzare l'oggetto cin, si utilizza l'oggetto ifstream/ fstream.

Esempio 3:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file.txt", ios::in);
	if (!my_file) {
		cout << "No such file";
	}
	else {
		char ch;

		while (1) {
			my_file >> ch;
			if (my_file.eof())
				break;

			cout << ch;
		}

	}
	my_file.close();
	return 0;
}

Produzione:

Leggi da file

Nessun file del genere

Ecco uno screenshot del codice:

Leggi da file

Spiegazione del codice:

  1. Includere il file di intestazione iostream nel programma per utilizzare le sue funzioni.
  2. Includere il file di intestazione fstream nel programma per utilizzare le sue classi.
  3. Includere lo spazio dei nomi std nel programma per utilizzare le sue classi senza chiamarlo.
  4. Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta al corpo di questa funzione.
  5. Crea un'istanza della classe fstream e dagli il nome my_file.
  6. Utilizza la funzione open() per creare un nuovo file denominato my_file.txt. Il file verrà aperto in modalità per leggerlo.
  7. Utilizzare un'istruzione if per verificare se il file non esiste.
  8. Testo da stampare sulla console se il file non viene trovato.
  9. Fine del corpo dell'istruzione if.
  10. Utilizzare un'istruzione else per indicare cosa fare se il file viene trovato.
  11. Creare un variabile carattere chiamato cap.
  12. Creare un mentre il ciclo per scorrere il contenuto del file.
  13. Scrive/memorizza il contenuto del file nella variabile ch.
  14. Utilizzare una condizione if e una funzione eof() ovvero la fine del file, per garantire che il compilatore continui a leggere dal file se la fine non viene raggiunta.
  15. Utilizzare un'istruzione break per interrompere la lettura del file una volta raggiunta la fine.
  16. Stampa il contenuto della variabile ch sulla console.
  17. Fine del corpo.
  18. Fine del corpo dell'istruzione else.
  19. Chiama la funzione close() per chiudere il file.
  20. Il programma deve restituire valore in caso di completamento positivo.
  21. Fine del corpo della funzione main().

Sommario

  • Con la gestione dei file, l'output di un programma può essere inviato e memorizzato in un file.
  • È quindi possibile applicare una serie di operazioni ai dati nel file.
  • Un flusso è un'astrazione che rappresenta un dispositivo in cui vengono eseguite le operazioni di input/output.
  • Un flusso può essere rappresentato come destinazione o origine di caratteri di lunghezza indefinita.
  • La libreria fstream fornisce C++ programmatori con metodi per la gestione dei file.
  • Per utilizzare la libreria, è necessario includerla nel programma utilizzando la direttiva del preprocessore #include.