C ++ ifstream para ler arquivos

C ++ ifstream para ler arquivos
IFStream significa File-Stream de entrada. “Input” refere -se a caracteres de um arquivo que entra no programa em execução. Há também o termo C ++, OfStream, que significa File-Stream de saída. No entanto, este artigo se concentra em Ifstream. O IFStream é uma classe C ++, para lidar com a sequência de bytes no computador, que é de um arquivo no disco, e entra no programa em execução. O IFStream está na biblioteca (cabeçalho), FStream, que deve ser incluído no programa de código -fonte.

Um programa C ++ para usar a classe IFStream deve começar da seguinte forma:

#incluir
#incluir
usando namespace std;

A primeira linha inclui o cabeçalho que tem a definição da classe ifstream. A segunda linha inclui o cabeçalho iostream que possui o objeto Cout para imprimir a saída para o terminal (console). A terceira linha é uma declaração, e não uma diretiva. O espaço para nome padrão é qualquer nome seguido de "std :;".

Este artigo explica o uso da classe IFStream do cabeçalho FStream, para lidar com a entrada de um arquivo no disco em um programa em execução. A entrada é caracteres em sequência que vão para um buffer na memória antes de chegar ao programa. Em outras palavras, este artigo explica como ler um arquivo de texto, do disco, em c++.

Criando um objeto ifstream

Para ler o conteúdo de um arquivo no disco, um objeto IFStream deve ser instanciado da classe IFStream. Os construtores comumente usados ​​pelos programadores anglo-saxões (incluindo a Europa Ocidental) são:

Basic_ifstream ();
explícito básico_ifstream (const char* s, ios_base :: openmode mode = ios_base :: in);
e
explícito Basic_ifstream (const string & s, ios_base :: openmode mode = ios_base :: in);

O prefixo, "Basic_" pode ser omitido para as três sintaxes. O uso da primeira sintaxe aqui será ilustrado na próxima seção. Na segunda sintaxe, o primeiro argumento é um literal ou uma variedade de caracteres que terminam em '\ 0'. Esta string é um caminho de diretório e nome de arquivo, e.g. “DIR1/TXTFILE.txt ”, assumindo que o programa esteja no diretório doméstico/usuário. Para a segunda sintaxe, o primeiro argumento é o mesmo que o primeiro argumento da sintaxe anterior, mas é uma string da classe String (cabeçalho). Em ambas as sintaxes, o segundo argumento deve ser "ios_base :: in", onde "in" significa ler (entrada).

Ilustração

Uma declaração de construção para a segunda sintaxe é a seguinte:

ifstream ifs = ifstream ("DIR1/TXTFILE.txt ", ios_base :: in);

O nome do arquivo cujo conteúdo deve ser lido é: “TXTFILE.TXT". Após esta declaração, o arquivo “txtfile.txt ”é considerado aberto no programa de corrida. Quando um arquivo é aberto, uma sequência de caracteres consecutivos que representam o arquivo está na memória para controle de buffer.

Um segmento de código de construção para a terceira sintaxe é:

string str = "DIR1/TXTFILE.TXT";
ifstream ifs = ifstream (str, ios_base :: in);

Em qualquer situação, o IFS é o objeto ifstream do arquivo aberto. Com o tipo de string, não se esqueça de incluir a classe String (cabeçalho) no programa da seguinte forma:

#incluir

Abrindo um arquivo

Diz -se que um arquivo foi aberto quando uma sequência de caracteres consecutivos do arquivo que representam o arquivo está na memória para controle de buffer. A segunda e a terceira sintaxe de construção acima abrem o arquivo para leitura, mas a primeira sintaxe não. Ou seja, a segunda e a terceira sintaxes fazem instanciação do objeto ifstream e a abertura do arquivo também, enquanto a primeira sintaxe faz apenas instanciação. O objeto IFS pode ser instanciado da classe IFStream usando a primeira sintaxe com a instrução:

ifstream ifs;

Nesse caso, um objeto de arquivo IFS foi criado, mas o arquivo ainda não foi aberto. Para abrir o arquivo para leitura, a função de membro aberto da classe ifstream deve ser usado. Os métodos Open () sobrecarregados comumente usados ​​pelos programadores anglo-saxões (incluindo a Europa Ocidental) são:

void aberto (const char* s, ios_base :: openmode mode = ios_base :: in);
void aberto (const string & s, ios_base :: openmode mode = ios_base :: in);

Observe que a declaração de construção “ifstream ifs;” não menciona nenhum arquivo no disco. E assim, o primeiro e o segundo argumentos desses funções de membro do Open () têm os mesmos significados que os da segunda e a terceira sintaxe de construção acima, respectivamente, respectivamente.

Ilustração

O uso da primeira função de membro Open () aqui (nesta seção) pode ser ilustrado da seguinte maneira:

ifstream ifs;
const char* str = "dir1/txtfile.TXT";
ifs.aberto (str, ios_base :: in);

O uso da segunda função de membro Open () aqui (nesta seção) pode ser ilustrado da seguinte forma:

ifstream ifs;
string str = "DIR1/TXTFILE.TXT";
ifs.aberto (str, ios_base :: in);

A diferença nos dois segmentos de código são as maneiras pelas quais a string para o caminho e o nome do arquivo são construídos.

O arquivo foi aberto?

Diz -se que um arquivo foi aberto, quando uma sequência de caracteres consecutivos do arquivo que representam o arquivo está na memória para controle de buffer. E se o caminho e/ou o nome do arquivo estivessem errado? E se o arquivo não pudesse ser aberto porque o disco era ruim e seus setores não puderam ser lidos? É aconselhável verificar sempre se o arquivo foi aberto usando a sintaxe:

bool is_open () const;

is_open () é uma função de membro da classe ifstream. Ele retorna verdadeiro, se o arquivo foi aberto com sucesso e false caso contrário. O segmento de código a seguir ilustra o uso desta função de membro:

ifstream ifs;
const char* str = "dir1/txtfile.TXT";
ifs.aberto (str, ios_base :: in);
if (ifs.is_open () == true)
cout << "File is opened." << endl;
outro
cout << "File could not be open!" << endl;

A saída deve ser:

O arquivo é aberto.

Fechando um arquivo

Um arquivo deve ser fechado após a abertura. A ação de encerramento interrompe o buffer na memória, liberando espaço de memória para outras atividades. Também quebra graciosamente a conexão que fez com o arquivo no disco. Ifstream tem a função de membro Close () para fechar um arquivo aberto. A sintaxe é:

vazio close ();

O segmento de código a seguir ilustra seu uso:

ifstream ifs = ifstream ("DIR1/TXTFILE.txt ", ios_base :: in);
if (ifs.is_open () == true)
/* Faça algo com o arquivo aberto aqui. */
ifs.fechar();
cout << "Opened File has been closed." << endl;

outro
cout << "File could not be open!" << endl;

A saída é:

O arquivo aberto foi fechado.

O arquivo deve ser usado quando o programador tiver certeza de que foi aberto e depois fechado depois disso.

Lendo os personagens um por um

O IFStream tem uma função de membro cuja sintaxe é:

Basic_istream& get (char_type & c);

Quando recebe o próximo personagem, ele o coloca na variável C e retorna o objeto do IFStream herdado de Basic_istream. O ponteiro interno de Ifstream, então aponta para o próximo personagem para a próxima leitura. Quando o final do arquivo é alcançado, o objeto retornado é convertido para falso.

O seguinte segmento de código lê todos os caracteres do arquivo um por um e envia cada um para o terminal (console):

char c;
enquanto (ifs.obtenha (c))
cout << c;

C tem que ser declarado primeiro. C é o argumento de get (), que é uma função de membro do objeto ifstream. A única declaração simples (cout << c;) of the while compound statement sends a copy of the character to the output.

Em vez de enviar os caracteres para a saída, eles podem ser enviados para um objeto String, formando uma string longa da seguinte maneira:

char c;
string str;
enquanto (ifs.obtenha (c))
str.push_back (c);

Nesse caso, o cabeçalho da string (biblioteca) deve ser incluído no programa.

O programa a seguir lê todo o conteúdo de um arquivo e o exibe:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

ifstream ifs = ifstream ("DIR1/TXTFILE.txt ", ios_base :: in);
if (ifs.is_open () == true)
char c;
string str;
enquanto (ifs.obtenha (c))
str.push_back (c);
cout << str<< endl;
ifs.fechar();
cout << "Opened File has been closed." << endl;

outro
cout << "File could not be open!" << endl;
retornar 0;

Conclusão

A classe ifstream do cabeçalho FStream lida com a entrada de um arquivo de disco em um programa em execução. Para criar um objeto ifstream, use qualquer uma das sintaxes:

Basic_ifstream ();
explícito básico_ifstream (const char* s, ios_base :: openmode mode = ios_base :: in);
explícito Basic_ifstream (const string & s, ios_base :: openmode mode = ios_base :: in);

Se a primeira sintaxe for usada, o objeto ainda deve ser aberto, com qualquer uma das seguintes sintaxes da função de membro:

void aberto (const char* s, ios_base :: openmode mode = ios_base :: in);
void aberto (const string & s, ios_base :: openmode mode = ios_base :: in);

Para saber se um arquivo é aberto com sucesso, use a sintaxe da função do membro:

bool is_open () const;

O objeto Ifstream deve ser fechado após o uso.

Para ler os personagens um por um, use em um loop de tempo, a sintaxe da função de membro:

Basic_istream& get (char_type & c);