Arquivos e fluxos C ++
Até agora, temos usado o iostream biblioteca padrão, que fornece cin e cout métodos para leitura da entrada padrão e gravação 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 chamadafstream, que define três novos tipos de dados -
Sr. Não | Tipo de dados e descrição |
---|---|
1 | ofstream Este tipo de dados representa o fluxo do arquivo de saída e é usado para criar arquivos e gravar informações em arquivos. |
2 | ifstream Este tipo de dados representa o fluxo do arquivo de entrada e é usado para ler informações dos arquivos. |
3 | fstream Esse tipo de dados representa o fluxo de arquivos em geral e tem os recursos ofstream e ifstream, o que significa que 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 <iostream> e <fstream> 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. Ouofstream ou fstreamobjeto 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 open() A função de membro define o modo em que o arquivo deve ser aberto.
Sr. Não | Sinalizador e descrição do modo |
---|---|
1 | ios::app Modo anexo. Todas as saídas desse arquivo devem ser 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 gravação. |
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 por ORjuntando-os. Por exemplo, se você deseja abrir um arquivo no modo de gravação e deseja truncá-lo caso já exista, a seguinte 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 automaticamente libera 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 de encerrar o programa.
A seguir está a sintaxe padrão para a função close (), que é membro dos objetos fstream, ifstream e ofstream.
void close();
Gravando em um Arquivo
Ao fazer programação 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 umofstream ou fstream objeto em vez do cout objeto.
Lendo de um arquivo
Você lê as 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 umifstream ou fstream objeto em vez do cin objeto.
Ler e escrever exemplo
A seguir está o programa C ++ que abre um arquivo no modo de leitura e gravação. Depois de gravar as informações inseridas pelo usuário em um arquivo denominado afile.dat, o programa lê as informações do arquivo e as exibe na tela -
#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 entrada e saída de amostra -
$./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 de leitura anterior.
Ponteiros de posição de arquivo
Ambos istream e ostreamfornece funções de membro para reposicionar o ponteiro de posição do arquivo. Essas funções de membro sãoseekg ("buscar obter") para istream e seekp ("buscar colocar") para ostream.
O argumento para seekg e seekp normalmente é um inteiro longo. Um segundo argumento pode ser especificado para indicar a direção da busca. A direção de busca pode serios::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 a localização no arquivo como um número de bytes a partir da localização 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 );