Crea un file in C++

Jinku Hu 12 ottobre 2023
  1. Usa std::fstream, std::open e std::ios_base::out per creare un file in C++
  2. Usa std::fstream, std::open e std::ios_base::app per creare un file in C++
  3. Usa std::fstream e la funzione fopen per creare un file in C++
Crea un file in C++

Questo articolo spiegherà diversi metodi su come creare un file in C++.

Usa std::fstream, std::open e std::ios_base::out per creare un file in C++

La creazione di file è generalmente collegata all’operazione di apertura dei file, che di per sé è l’azione di associare la struttura del flusso di file al file fisico corrispondente sul disco. In genere, l’operazione di creazione del file dipende dalla modalità in cui il programma apre il file. Esistono più modalità per aprire un file, come la modalità di sola scrittura, la modalità di sola lettura, la modalità di aggiunta, ecc. Di solito, ogni modalità che comporta la scrittura sul file ha lo scopo di creare un nuovo file se il nome del file specificato non esiste. Quindi, dobbiamo chiamare la funzione incorporata open di std::fstream per creare un nuovo file con il nome fornito come primo argomento string. Il secondo argomento di open specifica la modalità in cui aprire il flusso di file e queste modalità sono predefinite dalla lingua (vedere pagina).

#include <fstream>
#include <iostream>

using std::cerr;
using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;

int main() {
  string filename("output.txt");
  fstream output_fstream;

  output_fstream.open(filename, std::ios_base::out);
  if (!output_fstream.is_open()) {
    cerr << "Failed to open " << filename << '\n';
  } else {
    output_fstream << "Maecenas accumsan purus id \norci gravida pellentesque."
                   << endl;
    cerr << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

Produzione:

Done Writing!

Usa std::fstream, std::open e std::ios_base::app per creare un file in C++

In alternativa, possiamo aprire il file in modalità append indicato da std::ios_base::app e forzare il posizionamento dello stream alla fine del file ad ogni scrittura. Questa modalità presuppone anche la creazione di un nuovo file se non esiste nel percorso specificato. Notare che il flusso di file aperto con successo può essere verificato con la funzione is_open che restituisce true quando lo stream è associato.

#include <fstream>
#include <iostream>

using std::cerr;
using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;

int main() {
  string text("Large text stored as a string\n");
  string filename2("output2.txt");
  fstream outfile;

  outfile.open(filename2, std::ios_base::app);
  if (!outfile.is_open()) {
    cerr << "failed to open " << filename2 << '\n';
  } else {
    outfile.write(text.data(), text.size());
    cerr << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

Produzione:

Done Writing!

Usa std::fstream e la funzione fopen per creare un file in C++

Un’altra opzione per creare un file è utilizzare l’interfaccia della libreria standard C fopen, che restituisce la struttura FILE*. La funzione accetta due argomenti: una stringa di caratteri che specifica il percorso del file da aprire e un’altra stringa letterale per indicare la modalità in cui aprire. Sono definite sei modalità comuni: r - di sola lettura quando lo stream è posizionato all’inizio, w - di sola scrittura - all’inizio, a - di sola scrittura (append) - posizionato alla fine del file e le versioni plus dei tre - r+, w+, a+, che includono inoltre la modalità opposta.

#include <fstream>
#include <iostream>

using std::cerr;
using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;

int main() {
  string text("Large text stored as a string\n");
  fstream outfile;

  string filename3("output3.txt");
  FILE *o_file = fopen(filename3.c_str(), "w+");
  if (o_file) {
    fwrite(text.c_str(), 1, text.size(), o_file);
    cerr << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

Produzione:

Done Writing!
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Articolo correlato - C++ Filesystem