Entradas/saidas: Os fluxos em C++

Setembro 2017



Para fazer salvar os dados após o fechamento de seus programas, você deve gravar os mesmos em arquivos. Esta dica mostra como você fazê-lo.

Para abrir um arquivo, seja em leitura ou para escrever, você deve declarar uma instância de objetos ofstream e/ou ifstream. Para isso, pense em incluir o "fstream".

Atenção: o arquivo utilizado para os exemplos é chamado data.txt" Nada impede que você o nomeie como quiser. Isso não muda o resultado em nada.

Abrir um arquivo em leitura


Para abrir um arquivo em leitura, o objeto necessário é o "ifstream", e você devera fechar este fluxo com a função membro close().

Abertura do arquivo "data.txt" em leitura


#include <iostream>  
#include <fstream>  

using namespace std;  

int main()  
{  

    ifstream arquivo ("data.txt");  

    arquivo.close();                     //fechamento do fluxo  

    return 0;  
}  


Aparentemente,esse código não faz nada mas, na verdade, ele abre o arquivo "data.txt" em leitura.

Nós instanciamos um objeto do tipo "ifstream" dando-lhe como parâmetro o nome do nosso arquivo.
Implicitamente, isso chama o construtor da classe "ifstream" que vai abrir este arquivo.

Leitura do conteúdo do "data.txt"


#include <iostream>  
#include <fstream>  

using namespace std;  

int main()  
{  

    ifstream arquivo ("data.txt");  
    char caractere;  

    while(arquivo .get(caractere))   
        cout << caractere;  

    cout << endl << endl;  
    arquivo .close();                     //fechamento do fluxo  

    return 0;  
}  

Abrir um arquivo em escrita


Para abrir um arquivo em leitura, o objeto necessário é o "ofstream", depois é preciso fechar este fluxo com a função membro close().

Abertura do arquivo "data.txt" em escrita


#include <iostream>  
#include <fstream>  

using namespace std;  

int main()  
{  

    ofstream arquivo ("data.txt");  

    arquivo .close();                     //fechamento do fluxo  

    return 0;  
}  


Aparentemente, este código não faz nada mas, na verdade, ele abre o arquivo "data.txt" em escrita.

Escrever no "data.txt"


#include <iostream>  
#include <fstream>  

using namespace std;  

int main()  
{  

    char bom dia[10] = "bom dia!"  
    ofstream arquivo ("data.txt");  

    arquivo  << bom dia;              //escrita da cadeia bom dia em data.txt  
    arquivo .close();                     //fechamento do fluxo  

    return 0;  
}  


Com certeza, você já encontrou códigos do tipo:

cout << "cadeia a ser exibida";

E você deve ter notado o seu uso no código acima.
Reencontrar assim o operador <<pode parecer estranho, já que normalmente ele é utilizado para mover bits.

Na verdade, este operador é usado em objetos de gerenciamento de fluxo (ifstream, ofstream, etc) para escrever ou ler no fluxo. Isto é programado através de uma sobrecarga do operador. Sem precisar se perder em detalhes fora o assunto em questão, é útil observar que sobrecargar um operador significa "para tal operador (+, -, <<, etc) aplicado a esse tipo de objeto (ifstream, ofstream), eu quero que tal coisa aconteça".

Aqui, o ifstream utiliza >> para ler a partir do fluxo, e o ofstream utiliza << para gravar para o fluxo. Estes operadores foram selecionados entre as bibliotecas padrão pois eles são muito visuais, e expressam claramente o movimento e a sua direção.

Diferentes tipos de abertura de fluxo


Por padrão, o ofstream cria, automaticamente, um arquivo, se o especificado não existir. Mas você pode adicionar parâmetros para nesse construtor, para mudar o comportamento:
  • Veja a lista de configurações possíveis:
    • ios::app : Abre o arquivo em acréscimo, no fim, em vez de remover o seu conteúdo antes.
    • ios::ate : Pode ser colocado no fim do arquivo .
    • ios::trunc : Comportamento padrão: o conteúdo é removidona abertura.
    • ios::nocreate : Provoca uma falha da abertura se o arquivo não existe.
    • ios::noreplace : Provoca uma falha da abertura se o arquivo já existe.



Tradução feita por Lucia Maurity y Nouira

Veja também

Artigo original publicado por Carlos-vialfa. Tradução feita por pintuda. Última modificação: 16 de outubro de 2011 às 09:22 por pintuda.
Este documento, intitulado 'Entradas/saidas: Os fluxos em C++', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.