Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Dominando I/O de Arquivos em C++: Leitura e Escrita com fstream

Até agora, temos usado a biblioteca padrão iostream, que fornece métodos cin e cout para leitura de entrada padrão e escrita em saída padrão, respectivamente.

Este tutorial ensinará como ler e escrever em um arquivo. Isso requer outra biblioteca padrão C++ chamada fstream, que define três novos tipos de dados:

NºTipo de Dado e Descrição
1

ofstream

Representa stream de saída de arquivo; usado para criar arquivos e escrever informações neles.

2

ifstream

Representa stream de entrada de arquivo; usado para ler informações de arquivos.

3

fstream

Representa stream de arquivo geral; tem capacidades de ofstream e ifstream — pode criar, escrever e ler arquivos.

Para realizar processamento de arquivos em C++, os headers <iostream> e <fstream> devem ser incluídos no seu arquivo fonte C++.

Abrindo um Arquivo

Um arquivo deve ser aberto antes que você possa ler ou escrever nele. Objetos ofstream ou fstream podem ser usados para abrir um arquivo para escrita. E objeto ifstream é usado para abrir arquivo apenas para leitura.

A seguir está a sintaxe padrão para a função open(), que é membro de fstream, ifstream e ofstream:

void open(const char *filename, ios::openmode mode);

Aqui, o primeiro argumento especifica o nome e localização do arquivo a ser aberto e o segundo argumento da função membro open() define o modo em que o arquivo deve ser aberto.

NºFlag de Modo e Descrição
1

ios::app

Modo append. Toda saída para o arquivo é anexada ao final.

2

ios::ate

Abre arquivo para saída e move controle de leitura/escrita para o final do arquivo.

3

ios::in

Abre arquivo para leitura.

4

ios::out

Abre arquivo para escrita.

5

ios::trunc

Se arquivo já existe, seu conteúdo será truncado antes de abrir.

Você pode combinar dois ou mais destes valores fazendo OR bit a bit. Por exemplo, se quiser abrir arquivo em modo escrita e truncá-lo se já existir, a sintaxe será:

ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc);

Da mesma forma, você pode abrir arquivo para leitura e escrita como segue:

fstream afile;
afile.open("file.dat", ios::out | ios::in);

Fechando um Arquivo

Quando um programa C++ termina, ele automaticamente dá flush em todos os streams, libera toda memória alocada e fecha todos os arquivos abertos. Mas é sempre uma boa prática que o programador feche todos os arquivos abertos antes da terminação do programa.

A seguir está a sintaxe padrão para a função close(), que é membro de fstream, ifstream e ofstream:

void close();

Escrevendo em um Arquivo

Durante programação C++, você escreve informação em um arquivo do seu programa usando o operador de inserção de stream (<<) da mesma forma que usa para saída na tela. A única diferença é que você usa um objeto ofstream ou fstream em vez do objeto cout.

Lendo de um Arquivo

Você lê informação de um arquivo para seu programa usando o operador de extração de stream (>>) da mesma forma que usa para entrada do teclado. A única diferença é que você usa um objeto ifstream ou fstream em vez do objeto cin.

Exemplo de Leitura e Escrita

O programa C++ a seguir abre um arquivo em modo leitura e escrita. Após escrever informação inserida pelo usuário em um arquivo chamado afile.dat, o programa lê informação do arquivo e a exibe na tela:

#include <fstream>
#include <iostream>
using namespace std;
int main() {
    char data[100];
    // abre arquivo em modo escrita
    ofstream outfile;
    outfile.open("afile.dat");
    cout << "Writing to the file" << endl;
    cout << "Enter your name: ";
    cin.getline(data, 100);
    // escreve dados inseridos no arquivo
    outfile << data << endl;
    cout << "Enter your age: ";
    cin >> data;
    cin.ignore();
    // escreve novamente dados inseridos no arquivo
    outfile << data << endl;
    // fecha arquivo aberto
    outfile.close();
    // abre arquivo em modo leitura
    ifstream infile;
    infile.open("afile.dat");
    cout << "Reading from the file" << endl;
    infile >> data;
    // escreve dados na tela
    cout << data << endl;
    // lê novamente dados do arquivo e exibe
    infile >> data;
    cout << data << endl;
    // fecha arquivo aberto
    infile.close();
    return 0;
}

Quando o código acima é compilado e executado, produz a seguinte entrada e saída de exemplo:

$./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9

Os exemplos acima fazem uso de funções adicionais do objeto cin, como getline() para ler linha de fora e ignore() para ignorar caracteres extras deixados pela instrução de leitura anterior.

Ponteiros de Posição de Arquivo

Tanto istream quanto ostream fornecem funções membro para reposicionar o ponteiro de posição do arquivo. Estas funções membro são seekg ("seek get") para istream e seekp ("seek put") para ostream.

O argumento para seekg e seekp normalmente é um inteiro longo. Um segundo argumento pode ser especificado para indicar a direção do seek. A direção pode ser ios::beg (padrão) para posicionamento relativo ao início do stream, ios::cur para posicionamento relativo à posição atual no stream ou ios::end para posicionamento relativo ao final do stream.

O ponteiro de posição de arquivo é um valor inteiro que especifica a localização no arquivo como número de bytes a partir do início do arquivo. Alguns exemplos de posicionamento do ponteiro "get":

// posiciona no n-ésimo byte do fileObject (assume ios::beg)
fileObject.seekg(n);
// posiciona n bytes à frente no fileObject
fileObject.seekg(n, ios::cur);
// posiciona n bytes atrás do final do fileObject
fileObject.seekg(n, ios::end);
// posiciona no final do fileObject
fileObject.seekg(0, ios::end);

Linguagem C

  1. Dominando Variáveis, Literais e Constantes em C++: Guia Completo
  2. Classes e Objetos em C++: Guia Prático de Programação Orientada a Objetos
  3. Funções Amigas e Classes Amigas em C++: Dominando o Controle de Acesso
  4. Manipulação de Arquivos em C: Dominando I/O com fopen, fprintf, fread e fseek
  5. Dominando Operações com Diretórios e Arquivos em Python
  6. Estruturas vs Classes em C++: Guia Prático para Desenvolvedores Embarcados
  7. Entendendo Arquivos de Cabeçalho em C: Tipos, Uso e Boas Práticas
  8. Guia Completo de Data e Hora em C++
  9. Dominando Sobrecarga em C++: Funções e Operadores Explicados
  10. O Que é uma Lima Paralela? Guia Completo da Ferramenta Essencial para Marcenaria e Metalurgia