HOWTO · C++

Come aggiungere testo a un file in C++

Questo articolo spiega come aggiungere testo a un file in C++

In questa pagina

Lavorare con i file è un’attività comune nella programmazione e C++ fornisce potenti strumenti per la manipolazione dei file. Un’operazione comune è l’aggiunta di testo a un file esistente.

Questo articolo esplora diversi metodi per raggiungere questo obiettivo, offrendo esempi di codice e spiegazioni per aiutarvi a comprendere a fondo il processo.

Aggiungere testo a un file in C++ utilizzando ofstream con il flag std::ios::app

In C++, la classe std::ofstream fa parte della Standard Template Library (STL) e viene utilizzata per scrivere nei file. È una scelta eccellente quando si desidera creare, aprire, scrivere o accodare dati a file di testo.

Inoltre, il flag std::ios::app è un componente importante di std::ofstream. Quando viene utilizzato, indica al flusso di aprire il file in modalità di accodamento, il che significa che tutti i dati scritti nel flusso verranno aggiunti alla fine del contenuto esistente del file.

Se il file non esiste, verrà creato.

Ora, per accodare testo a un file in C++ utilizzando std::ofstream con il flag std::ios::app, potete seguire questi passaggi:

  • Includete i file di intestazione necessari:
    #include <fstream>
    #include <iostream>
    
  • Aprite il file in modalità di accodamento (std::ios::app) utilizzando un oggetto std::ofstream.
  • Scrivete il testo che volete accodare al file utilizzando l’operatore <<.
  • Chiudete il file quando avete finito.

Ecco un esempio:

#include <fstream>
#include <iostream>

int main() {
  // File path
  std::string filePath = "example.txt";

  // Open the file in append mode
  std::ofstream outputFile(filePath, std::ios::app);

  if (!outputFile) {
    std::cerr << "Failed to open the file for appending." << std::endl;
    return 1;
  }

  // Text to append to the file
  std::string textToAppend = "This is some appended text.";

  // Append the text to the file
  outputFile << textToAppend << std::endl;

  // Close the file
  outputFile.close();

  std::cout << "Text appended to the file successfully." << std::endl;

  return 0;
}

In questo esempio, abbiamo prima aperto il file example.txt in modalità di accodamento utilizzando std::ios::app. Se il file non esiste, verrà creato.

Abbiamo poi accodato il testo specificato al file utilizzando l’operatore << e infine abbiamo chiuso il file.

Assicuratevi di controllare gli errori durante l’apertura del file, come mostrato nell’esempio, per gestire i casi in cui il file non può essere aperto.

Aggiungere testo a un file in C++ utilizzando fstream con il flag std::ios::app

Simile all’approccio ofstream, potete utilizzare std::fstream con il flag std::ios::app per aprire un file sia per la lettura che per l’accodamento.

In C++, la classe std::fstream fa parte della Standard Template Library (STL) e viene utilizzata per l’input e l’output dei file. È anche una scelta eccellente quando è necessario creare, aprire, scrivere o accodare dati a file di testo.

Il flag std::ios::app è un componente vitale di std::fstream. Quando viene applicato, indica al flusso di aprire il file in modalità di accodamento.

In questa modalità, tutti i dati scritti nel flusso verranno aggiunti alla fine del contenuto esistente del file. Se il file non esiste, verrà creato.

Per accodare testo a un file in C++ utilizzando std::fstream con il flag std::ios::app, potete seguire questi passaggi:

  • Includete le intestazioni necessarie:
    #include <fstream>
    #include <iostream>
    #include <string>
    
  • Create un oggetto std::fstream e aprite il file in modalità di accodamento:
    std::fstream file("example.txt", std::ios::app);
    
  • Verificate se il file è stato aperto correttamente utilizzando if (!file.is_open()).
  • Accodate il testo al file utilizzando file << textToAppend << std::endl;, sostituendo textToAppend con il testo desiderato.
  • Chiudete il file quando avete finito con file.close();.

Ecco l’esempio completo:

#include <fstream>
#include <iostream>
#include <string>

int main() {
  // Open the file in append mode
  std::fstream file("example.txt", std::ios::app);

  // Check if the file is opened successfully
  if (!file.is_open()) {
    std::cerr << "Error opening the file!" << std::endl;
    return 1;  // Exit with an error code
  }

  // Text to append
  std::string textToAppend = "This is the text to append.";

  // Append text to the file
  file << textToAppend << std::endl;

  // Close the file
  file.close();

  return 0;
}

Questo codice aprirà il file in modalità di accodamento, accoderà il testo specificato e quindi chiuderà il file.

Se il file non esiste, verrà creato. Se esiste, il nuovo contenuto verrà aggiunto alla fine del file senza sovrascrivere il contenuto esistente.

Aggiungere testo a un file in C++ utilizzando std::ofstream senza flag

Ora, se volete creare un nuovo file o sovrascrivere il contenuto esistente, potete utilizzare std::ofstream senza alcun flag. Se il file esiste già, questo cancellerà effettivamente il suo contenuto e si ripartirà da zero.

Ecco un esempio di base:

#include <fstream>
#include <iostream>

int main() {
  // Creating a new file or overwriting existing content
  std::ofstream outputFile("example.txt");

  // Checking if the file is successfully opened
  if (outputFile.is_open()) {
    outputFile << "This will overwrite existing content.\n";
    outputFile.close();  // Always close the file when done
  } else {
    std::cerr << "Unable to open the file.\n";
  }

  return 0;
}

In questo frammento di codice, abbiamo prima creato un oggetto std::ofstream chiamato outputFile e specificato il file con cui vogliamo lavorare, in questo caso example.txt.

Aggiungere testo a un file in C++ utilizzando std::fstream e il metodo write()

Un altro metodo per risolvere questo problema è chiamare la funzione membro write esplicitamente dall’oggetto fstream piuttosto che usare l’operatore << come abbiamo fatto negli esempi precedenti. Questo metodo dovrebbe essere più veloce per la maggior parte degli scenari, ma profila sempre il tuo codice e confronta i tempi se hai requisiti di prestazioni rigorosi.

#include <fstream>
#include <iostream>

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

int main() {
  string text("Some huge text to be appended");
  string filename("tmp.txt");
  fstream file;

  file.open(filename, std::ios_base::app);
  if (file.is_open()) file.write(text.data(), text.size());
  cout << "Done!" << endl;

  return EXIT_SUCCESS;
}

Nel codice precedente, abbiamo aperto il file in modalità di accodamento (std::ios_base::app) utilizzando il metodo open() dell’oggetto fstream. Abbiamo anche controllato se il file è stato aperto correttamente utilizzando file.is_open().

Poi abbiamo usato il metodo write() per scrivere il testo come dati binari nel file. Come possiamo vedere, questo metodo accetta due argomenti: un puntatore ai dati e il numero di byte da scrivere.

Infine, abbiamo stampato Done! per indicare che l’operazione era completa.

Conclusione

Ogni metodo presentato in questo articolo offre un approccio unico per accodare testo a un file. La scelta del metodo dipende dalle vostre esigenze specifiche e dal vostro stile di codifica.