Programação em C ++ com a Biblioteca Streams

documento padrão ANSI C ++ dá uma biblioteca completa de classes que lidam com fluxos e entrada / saída geral. Felizmente, a maioria das classes na biblioteca padrão estão disponíveis com quase todos os compiladores actualmente disponíveis.

Obtendo o arquivo de cabeçalho direito

A biblioteca fluxos inclui várias classes que tornam a sua vida muito mais fácil. Ele também tem várias classes que podem tornar sua vida mais complicada, principalmente porque estas são as classes auxiliares que você provavelmente raramente usa. Aqui estão duas das classes mais comuns que você vai usar. (E lembre-se: Estas aulas estão disponíveis em praticamente todas as implementações de C ++, se a biblioteca padrão completa está presente ou não.)

  • ifstream: Este é um fluxo você instancia se você quiser ler um arquivo.

  • ofstream: Este é um fluxo você instancia se você quiser gravar em um arquivo.

Antes de poder utilizar o ifstream e ofstream classes, você incluir o arquivo de cabeçalho apropriado. Este é o lugar onde as coisas ficam feias. Nos primeiros dias de C ++, as pessoas usavam o arquivo de cabeçalho. Mas em algum lugar em meados dos anos 1990, as pessoas começaram a usar a Standard Template Library (e no final de 1990, a biblioteca C ++ padrão), ambos os quais solicitado que você se incluem (sem a .h extensão).

O Standard Template Library ea Biblioteca Padrão colocar todas as suas classes e objetos no interior do std namespace. Assim, quando você quiser usar um item da biblioteca de fluxos, você deve ou

  • Preceder seu nome com std, como neste exemplo:

    std :: ofstream outfile ( "MyFile.txt") -
  • incluir uma utilização directiva antes de as linhas em que você usar as classes de fluxo, como neste exemplo:

usando namespace outfile std-ofstream ( "MyFile.txt") -

Por padrão, o compilador GCC reconhece automaticamente o std namespace (é como se você tivesse uma linha usando namespace STD mesmo quando você não).

Se você estiver usando um compilador diferente do GCC, siga o seu #incluir com a linha de linhas utilização namespacestd-. Em seguida, você pode digitar todo o código de exemplo como está, incluindo os exemplos de transmissão, sem a necessidade de colocar std :: antes de cada classe ou objeto da biblioteca padrão.

Abrir um arquivo

Ir para o processador de texto, escolha Arquivo-Abrir e tipo MyGreatChapter.doc.

Oops. Você recebe uma mensagem de erro. Esse arquivo não existe.

Oh, isso é certo; você não tenha escrito ainda. Em vez disso, crie um novo documento dentro do processador de texto, tipo 800 páginas frias ao longo de uma noite relaxante, e depois (quando estiver tudo acabado) salvar o arquivo. Dê-lhe o nome MyGreatChapter.doc. Em seguida, desligue o processador de texto, sair à beira da piscina, se gabar para seus amigos sobre os novos romances que você está escrevendo, e ir para a cama.

Na manhã seguinte, abra o documento. Este tempo que existe, de modo que o processador de texto e lê-lo abre na informação.

Como você pode ver, duas questões se apresentam na abertura de um arquivo:

  • Criar um novo arquivo

  • Abrir um arquivo existente

Aqui é onde a vida fica um pouco estranho: Alguns sistemas operacionais tratar estes dois itens como uma única entidade. A razão é que quando você criar um novo arquivo, normalmente você quer começar imediatamente a usá-lo, o que significa que você deseja criar um novo arquivo e, em seguida, abri-lo. E assim o processo de criação de um arquivo é muitas vezes incorporado à direita para o processo de abertura de um arquivo.

E quando você abre um arquivo existente que você quer escrever, você tem duas opções:

  • Apagar o contents- atual, em seguida, gravar o arquivo.

  • Mantenha o conteúdo existente e escrever a sua informação para o fim do arquivo. Isto é chamado anexando informações em um arquivo.

o FileOutput01 exemplo de código mostra como abrir um arquivo novo, escrever algumas informações a ele, e depois fechá-lo. (Mas espere, ainda há mais: Esta versão funciona se você tem os compiladores mais recente ANSI-conformes ou os mais velhos)

#incluir #incluir usando namespace std-int main () {outfile ofstream ( "../ MyFile.txt") - outfile lt; lt; "Oi" lt; lt; endl-outfile.close () - retorno 0-}

O curta aplicativo abre um arquivo chamado MyFile.txt. (O # 147 - .. / # 148- parte do caminho de arquivo coloca o arquivo no diretório pai para o exemplo, que é a pasta Chapter01) Ele faz isso através da criação de uma nova instância. ofstream, que é uma classe para escrever para um arquivo.

A próxima linha de código escreve a string "Oi" para o arquivo. Ele usa o operador de inserção, >>, assim como cout faz. De fato, ofstream é derivado a partir da mesma classe que cout é uma instância de, e então isso significa que todas as coisas que você pode fazer com cout você também pode fazer com o seu arquivo! Uau!

Quando você terminar de gravar o arquivo, feche-o, chamando o fechar função de membro. Isso é importante!

Se você quiser abrir um arquivo existente e anexar a ele, você pode modificar a listagem ligeiramente. Tudo que você faz é alterar os argumentos passados ​​para o construtor da seguinte forma:

ofstream outfile ( "MyFile.txt", ios_base :: app) -

o ios :: app artigo é uma enumeração dentro de uma classe chamada ios, e a ios_base :: app artigo é uma enumeração na classe chamada ios_base.

o ios classe é a classe base a partir da qual o ofstream classe é derivada. o ios classe também serve como uma classe base para ifstream, que é para leitura de arquivos.

Para compiladores mais recentes, o ios_base classe é uma base para ofstream e ifstream. (Um par de classes estão no meio. ofstream é uma classe de modelo derivado de uma classe de modelo chamado basic_ofstream, que é derivado de uma classe de modelo chamado basic_ios, que é derivado a partir da classe ios_base.)

Você também pode ler a partir de um arquivo existente. Isso funciona exatamente como o cin objeto. o FileRead01 exemplo mostrado abre o arquivo criado anteriormente e lê a seqüência de volta. Este exemplo usa o diretório pai novamente como um lugar comum para criar, atualizar e ler arquivos.

#incluir #incluir #incluir usando namespace std-int main () {string infile palavra-ifstream ( "MyFile.txt ../") - infile >> palavra-cout lt; lt; palavra lt; lt; endl-infile.close () - retorno 0-}

Quando você executar este aplicativo, a seqüência escrito anteriormente para o arquivo - "Oi," - aparece na tela. Funcionou! Lia-se a corda no a partir do arquivo!

menu