Escrever para ficheiro em C++

Jinku Hu 12 outubro 2023
  1. Utilizar fstream e << Operator to Write to File
  2. Utilizar a função fstream e write para Escrever em ficheiro
  3. Utilize a função fwrite para Escrever em Arquivo
Escrever para ficheiro em C++

Este artigo irá explicar vários métodos de como escrever para um ficheiro em C++.

Utilizar fstream e << Operator to Write to File

O ficheiro I/O em C++ é tratado utilizando a classe fstream, que fornece múltiplos métodos incorporados para manipulação e posicionamento do fluxo. Uma vez declarado o objecto fstream, podemos chamar a função open, passando o nome do ficheiro e o modo em que se abre o ficheiro como argumentos.

Ao escrever para um ficheiro, especificamos o modo std::ios_base::out, que corresponde ao estado aberto para escrita. Em seguida, verificamos se o ficheiro foi associado com sucesso ao objecto stream, ou seja, a chamada para o método is_open na condição if. Neste ponto, o ficheiro está pronto para receber entrada utilizando o operador << e processar a saída conforme necessário.

Note que, o bloco else pode ser utilizado para fins de registo de erros, ou podemos implementar rotinas de tratamento de erros para uma melhor execução do programa tolerante a falhas.

#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;
}

Resultado:

Done Writing!

Utilizar a função fstream e write para Escrever em ficheiro

Outro método de escrever para ficheiro é a função integrada de write que pode ser chamada a partir do objecto fstream. A função write toma um ponteiro de string e o tamanho dos dados armazenados nesse endereço. Como resultado, determinados dados são inseridos no ficheiro associado ao objecto call stream.

Na seguinte amostra de código, demonstramos o relatório de erro mínimo, imprimindo o estado da função open, mas em aplicações do mundo real, seria necessário um tratamento de excepção mais robusto, que está documentado na página de manual.

#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;
}

Resultado:

Done Writing!

Utilize a função fwrite para Escrever em Arquivo

Em alternativa, podemos utilizar a função fwrite do ficheiro estilo C I/O para escrever no ficheiro. A função fwrite obtém os dados a partir do ponteiro void e o programador é responsável por passar o número de itens armazenados nesse endereço, bem como o tamanho de cada item. A função precisa que o fluxo do ficheiro seja do tipo FILE* e que pode ser obtido chamando a função fopen.

Note que o fwrite devolve o número de itens escritos a um ficheiro quando a operação é bem sucedida.

#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;
}

Resultado:

Done Writing!
Autor: 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

Artigo relacionado - C++ File