Crie um arquivo em C++

Jinku Hu 12 outubro 2023
  1. Use std::fstream, std::open e std::ios_base::out para criar um arquivo em C++
  2. Use std::fstream, std::open e std::ios_base::app para criar um arquivo em C++
  3. Use as funções std::fstream e fopen para criar um arquivo em C++
Crie um arquivo em C++

Este artigo explicará vários métodos de como criar um arquivo em C++.

Use std::fstream, std::open e std::ios_base::out para criar um arquivo em C++

A criação de arquivos geralmente está ligada à operação de abertura de arquivos, que em si é a ação de associar a estrutura do fluxo de arquivos ao arquivo físico correspondente no disco. Normalmente, a operação de criação de arquivo depende do modo em que o programa abre o arquivo. Existem vários modos para abrir um arquivo, como modo somente gravação, modo somente leitura, modo anexar, etc. Normalmente, cada modo que envolve a gravação no arquivo é destinado a criar um novo arquivo se o nome de arquivo fornecido não existir. Portanto, precisamos chamar a função integrada open de std::fstream para criar um novo arquivo com o nome fornecido como o primeiro argumento string. O segundo argumento para open especifica o modo no qual abrir o fluxo de arquivos, e esses modos são predefinidos pelo idioma (consulte página).

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

Resultado:

Done Writing!

Use std::fstream, std::open e std::ios_base::app para criar um arquivo em C++

Alternativamente, podemos abrir o arquivo no modo append denotado por std::ios_base::app e forçar o stream a ser posicionado no final do arquivo em cada escrita. Este modo também pressupõe a criação de um novo arquivo se ele não existir no caminho fornecido. Observe que, o fluxo de arquivo aberto com êxito pode ser verificado com a função is_open que retorna true quando o fluxo é associado.

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

Resultado:

Done Writing!

Use as funções std::fstream e fopen para criar um arquivo em C++

Outra opção para criar um arquivo é utilizar a interface da biblioteca padrão C fopen, que retorna a estrutura FILE*. A função leva dois argumentos: uma string de caracteres que especifica o caminho do arquivo a ser aberto e outra literal de string para indicar o modo de abertura. Seis modos comuns são definidos: r - somente leitura quando o fluxo é posicionado no início, w - somente gravação - no início, a - somente gravação (anexar) - posicionado no final do arquivo, e as versões positivas dos três - r+, w+, a+, que adicionalmente incluem o modo oposto.

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

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++ Filesystem