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

Arquivos e fluxos C++


Até agora, usamos o iostream biblioteca padrão, que fornece cin e cout métodos para ler da entrada padrão e gravar na saída padrão, respectivamente.

Este tutorial irá ensiná-lo a ler e escrever a partir de um arquivo. Isso requer outra biblioteca C++ padrão chamada fstream , que define três novos tipos de dados -
Sr.Nº Tipo de dados e descrição
1
do fluxo

Esse tipo de dados representa o fluxo de arquivos de saída e é usado para criar arquivos e gravar informações em arquivos.
2
ifstream

Esse tipo de dados representa o fluxo de arquivos de entrada e é usado para ler informações de arquivos.
3
fstream

Esse tipo de dados representa o fluxo de arquivos em geral e possui os recursos de ofstream e ifstream, o que significa que ele pode criar arquivos, gravar informações em arquivos e ler informações de arquivos.

Para executar o processamento de arquivos em C++, os arquivos de cabeçalho e devem ser incluídos em seu arquivo de origem C++.

Abrindo um arquivo


Um arquivo deve ser aberto antes que você possa ler ou gravar nele. Qualquer um de stream ou fstream objeto pode ser usado para abrir um arquivo para escrita. E o objeto ifstream é usado para abrir um arquivo apenas para leitura.

A seguir está a sintaxe padrão para a função open(), que é membro dos objetos fstream, ifstream e ofstream.
void open(const char *filename, ios::openmode mode);

Aqui, o primeiro argumento especifica o nome e a localização do arquivo a ser aberto e o segundo argumento do método open() A função membro define o modo no qual o arquivo deve ser aberto.
Sr.Nº Sinalização e descrição do modo
1
ios::app

Modo Anexar. Todas as saídas para esse arquivo serão anexadas ao final.
2
ios::ate

Abra um arquivo para saída e mova o controle de leitura/gravação para o final do arquivo.
3
ios::in

Abra um arquivo para leitura.
4
ios::out

Abra um arquivo para escrita.
5
ios::trunc

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

Você pode combinar dois ou mais desses valores OU ndo-os juntos. Por exemplo, se você deseja abrir um arquivo no modo de gravação e deseja truncá-lo caso já exista, a seguir será a sintaxe −
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );

De maneira semelhante, você pode abrir um arquivo para leitura e gravação da seguinte maneira -
fstream  afile;
afile.open("file.dat", ios::out | ios::in );

Fechando um arquivo


Quando um programa C++ termina, ele libera automaticamente todos os fluxos, libera toda a memória alocada e fecha todos os arquivos abertos. Mas é sempre uma boa prática que um programador feche todos os arquivos abertos antes do término do programa.

A seguir está a sintaxe padrão para a função close(), que é um membro dos objetos fstream, ifstream e ofstream.
void close();

Escrevendo em um arquivo


Ao fazer a programação em C++, você grava informações em um arquivo de seu programa usando o operador de inserção de fluxo (<<) da mesma forma que usa esse operador para enviar informações para a tela. A única diferença é que você usa um ofstream ou fstream objeto em vez do cout objeto.

Leitura de um arquivo


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

Exemplo de leitura e gravação


A seguir está o programa C++ que abre um arquivo no modo de leitura e escrita. Depois de gravar as informações inseridas pelo usuário em um arquivo chamado afile.dat, o programa lê as informações do arquivo e as exibe na tela -
Demonstração ao vivo
#include <fstream>
#include <iostream>
using namespace std;
 
int main () {
   char data[100];

   // open a file in write mode.
   ofstream outfile;
   outfile.open("afile.dat");

   cout << "Writing to the file" << endl;
   cout << "Enter your name: "; 
   cin.getline(data, 100);

   // write inputted data into the file.
   outfile << data << endl;

   cout << "Enter your age: "; 
   cin >> data;
   cin.ignore();
   
   // again write inputted data into the file.
   outfile << data << endl;

   // close the opened file.
   outfile.close();

   // open a file in read mode.
   ifstream infile; 
   infile.open("afile.dat"); 
 
   cout << "Reading from the file" << endl; 
   infile >> data; 

   // write the data at the screen.
   cout << data << endl;
   
   // again read the data from the file and display it.
   infile >> data; 
   cout << data << endl; 

   // close the opened file.
   infile.close();

   return 0;
}

Quando o código acima é compilado e executado, ele produz a seguinte amostra de entrada e saída -
$./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9

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

Ponteiros de posição do arquivo


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

O argumento para seekg e seekp normalmente é um número inteiro longo. Um segundo argumento pode ser especificado para indicar a direção de busca. A direção de busca pode ser ios::beg (o padrão) para posicionamento em relação ao início de um fluxo, ios::cur para posicionamento em relação à posição atual em um fluxo ou ios::end para posicionamento em relação ao final de um fluxo.

O ponteiro de posição do arquivo é um valor inteiro que especifica o local no arquivo como um número de bytes do local inicial do arquivo. Alguns exemplos de posicionamento do ponteiro de posição do arquivo "get" são −
// position to the nth byte of fileObject (assumes ios::beg)
fileObject.seekg( n );

// position n bytes forward in fileObject
fileObject.seekg( n, ios::cur );

// position n bytes back from end of fileObject
fileObject.seekg( n, ios::end );

// position at end of fileObject
fileObject.seekg( 0, ios::end );

Linguagem C

  1. Variáveis, literais e constantes de C++
  2. Classes e objetos C++
  3. Função de amigo C++ e classes de amigo
  4. C Manipulação de Arquivos
  5. Gerenciamento de diretórios e arquivos Python
  6. Estruturas e classes em C ++
  7. C - Arquivos de cabeçalho
  8. Data e hora do C++
  9. Sobrecarga de C++ (operador e função)
  10. O que é um arquivo Mill?