O Estado é um arquivo C ++ In?

A C ++ construído fstream objeto (incluindo ifstream e ofstream) Torna-se um proxy para o arquivo que ele está associado. Por exemplo, o objeto de fluxo mantém informações de estado sobre o processo de I / O. A função de membro mau() retornos verdade Se algo # 147-bad # 148- acontece.

Isso termo nebuloso significa que o arquivo não pôde ser aberto, algum objeto interno foi desordenado, ou as coisas estão apenas geralmente metralhado. Um erro menor falhou() indica que ou algo mau() aconteceu ou a última leitura falhou - por exemplo, se você tentar ler um int e todo o programa pode encontrar é um personagem que taxas um falhou() mas não um mau(). A função de membro Boa() retornos verdade Se ambos mau() e falhou() estamos falso.

As tentativas de entrada de ou saída para um objeto de fluxo que tem um conjunto de erro são ignorados. A função de membro Claro() zeros fora do falhou bandeira para lhe dar outra chance se o erro é temporário - em geral, Claro() limpa # 147 falhas # 148- mas não # 147-bad # 148- coisas. Todas as tentativas de saída para um ofstream objeto que tem um erro não ter efeito.

Este último parágrafo é destinado literalmente - é possível nenhuma entrada ou saída, desde que o estado de erro interno do objeto de fluxo que você está usando é diferente de zero. O programa não vai mesmo tentar até que você chamar Claro() para limpar os sinalizadores de erro se o erro é temporária e pode eliminá-la.

O seguinte programa exemplo demonstra como ir sobre como usar o ifstream classe para extrair uma série de números inteiros:

// StreamInput - entrada simples de um arquivo usando fstream # incluem #incluir #incluir #incluir usando namespace std-ifstream openFile () {ifstream * pFileStream = 0-for (-) {// abre o arquivo especificado pelo userString sFileName-cout lt; lt; "Digite o nome de um arquivo com números inteiros:" - cin >> sFileName - // arquivo aberto para readingpFileStream = new ifstream (sFileName.c_str ()) - if (pFileStream-> bom ()) {pFileStream-> seekg (0 ) -cerr lt; lt; "Com sucesso abriu" lt; lt; sFileName lt; lt; endl-break-} cerr lt; lt; "Não foi possível abrir" lt; lt; sFileName lt; lt; endl-delete pFileStream-} return * pFileStream-} int main (int nNumberofArgs, char * pszArgs []) {// obter um streamifstream arquivo fileStream = openFile () - // parar quando não há mais dados na filewhile {// ler um valueint nValue = 0-fileStream >> nValue (fileStream.eof ()!) - // parar se o arquivo de leitura falhou (provavelmente porque / / corremos em cima de algo que não é um int ou // porque descobrimos uma nova linha com nada depois de //-lo) if (fileStream.fail ()) {break -} // output o valor apenas readcout lt; lt; nValue lt; lt; endl-} cout lt; lt; "Pressione Enter para continuar ..." lt; lt; endl-cin.ignore (10, ' n') - cin.get () - retornar 0-}

A função abrir arquivo() solicita ao usuário o nome de um arquivo para abrir. A função cria uma ifstream () objeto com o nome especificado. Criação de um ifstream objeto abre automaticamente o arquivo para a entrada. Se o arquivo é aberto corretamente, a função retorna uma referência para o ifstream objeto a ser usado para leitura.

Caso contrário, o programa exclui o objeto e tenta novamente. A única maneira de sair do loop é entrar em um nome de arquivo válido ou abortar o programa.

Não se esqueça de apagar o pFileStream opor-se a abertura falha. Estas são as formas sorrateiras que vazamentos de memória se arrastam no.

O programa lê valores inteiros a partir do objeto referenciado por fileStream até que falhou() ou o programa chegar ao fim-de-lima, como indicado pela função de membro eof ().

Um último aviso: Não só não é nada de voltar de ler um fluxo de entrada que tem um erro, mas também o buffer de volta inalteradas. Este programa pode facilmente chegar à falsa conclusão de que acabou de ler o mesmo valor que anteriormente ler. Além disso, eof () nunca mais voltará a verdade em um fluxo de entrada que tem um erro.

menu