Scrivi su file in C++
-
Usa l’operatore
fstream
e<<
per scrivere su file -
Usa la funzione
fstream
ewrite
per scrivere su file -
Utilizzare la funzione
fwrite
per scrivere su file
Questo articolo spiegherà diversi metodi su come scrivere su un file in C++.
Usa l’operatore fstream
e <<
per scrivere su file
Il file I/O
in C++ è gestito utilizzando la classe fstream
, che fornisce più metodi integrati per la manipolazione e il posizionamento del flusso. Una volta dichiarato l’oggetto fstream
, possiamo chiamare la funzione open
, passando il nome del file e la modalità con cui aprire il file come argomenti.
Quando si scrive su un file, si specifica la modalità std::ios_base::out
, che corrisponde allo stato di apertura per la scrittura. Successivamente, controlliamo se il file è stato associato con successo all’oggetto stream, cioè la chiamata al metodo is_open
nella condizione if
. A questo punto, il file è pronto per ricevere input utilizzando l’operatore <<
ed elaborare l’output secondo necessità.
Si noti che il blocco else
può essere utilizzato per scopi di registrazione degli errori, oppure è possibile implementare routine di gestione degli errori per una migliore esecuzione del programma a tolleranza di errore.
#include <fstream>
#include <iostream>
using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;
int main() {
string filename("tmp.txt");
fstream file_out;
file_out.open(filename, std::ios_base::out);
if (!file_out.is_open()) {
cout << "failed to open " << filename << '\n';
} else {
file_out << "Some random text to write." << endl;
cout << "Done Writing!" << endl;
}
return EXIT_SUCCESS;
}
Produzione:
Done Writing!
Usa la funzione fstream
e write
per scrivere su file
Un altro metodo per scrivere su file è la funzione incorporata write
che può essere chiamata dall’oggetto fstream
. La funzione write
accetta un puntatore a una stringa di caratteri e la dimensione dei dati memorizzati a quell’indirizzo. Di conseguenza, i dati forniti vengono inseriti nel file associato all’oggetto flusso chiamante.
Nel seguente esempio di codice, dimostriamo la segnalazione di errori minimi stampando lo stato della chiamata di funzione open
, ma nelle applicazioni del mondo reale, richiederebbe una gestione delle eccezioni più robusta, documentata nella pagina di manuale.
#include <fstream>
#include <iostream>
using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;
int main() {
string text("Some huge text to write to\n");
string filename2("tmp2.txt");
fstream outfile;
outfile.open(filename2, std::ios_base::out);
if (!outfile.is_open()) {
cout << "failed to open " << filename2 << '\n';
} else {
outfile.write(text.data(), text.size());
cout << "Done Writing!" << endl;
}
return EXIT_SUCCESS;
}
Produzione:
Done Writing!
Utilizzare la funzione fwrite
per scrivere su file
In alternativa, possiamo usare la funzione fwrite
dal file in stile C I/O
per scrivere nel file. fwrite
ottiene i dati dal puntatore void
e il programmatore è responsabile del passaggio del numero di elementi memorizzati a quell’indirizzo e della dimensione di ciascun elemento. La funzione richiede che il flusso di file sia di tipo FILE*
e che può essere ottenuto chiamando la funzione fopen
.
Notare che fwrite
restituisce il numero di elementi scritti in un file quando l’operazione è riuscita.
#include <fstream>
#include <iostream>
using std::cout;
using std::endl;
using std::ofstream;
using std::string;
int main() {
string text("Some huge text to write to\n");
string filename3("tmp3.txt");
FILE *o_file = fopen(filename3.c_str(), "w+");
if (o_file) {
fwrite(text.c_str(), 1, text.size(), o_file);
cout << "Done Writing!" << endl;
}
return EXIT_SUCCESS;
}
Produzione:
Done Writing!
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook