O estado é um arquivo ++ c in?

Video: Me Salva! Programação em C - PLC19 - Arquivos - Manipulação

Um C, construídos ++ 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ção de estado sobre o processo de I / O. A função de membro mau() retornos verdade se algo “ruim” acontece.

Esse termo nebuloso significa que o arquivo não pôde ser aberto, algum objeto interna foi desarrumada, ou as coisas estão apenas geralmente metralhado. Um erro de menor falhou() indica que 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 saída ou a um objecto de fluxo que tem um conjunto de erro são ignorados. A função de membro Claro() zeros fora o falhou bandeira para lhe dar outra chance se o erro é temporário - em geral, Claro() limpa “falhas”, mas não coisas “más”. 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ário 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:

Video: Linguagem C: Arquivos



// StreamInput - entrada simples de um arquivo usando fstream # incluem #incluir #incluir #incluir using namespace std-ifstream& openFile () {ifstream * pFileStream = 0-para (-) {// abre o arquivo especificado pelo userString sFileName-cout lt; lt; "Digite o nome de um arquivo com números inteiros:"CIN II-III gt; gt; sFileName - arquivo // aberto para readingpFileStream = new ifstream (sFileName.c_str ()) - se (pFileStream-gt; bom ()) {pFileStream-gt; 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 () - (! fileStream.eof ()) // parada quando há mais dados em filewhile {// ler um valueint nValue = 0-fileStream gt; gt; nValue - // parar se o arquivo de leitura falhou (provavelmente porque // nós correu em cima de algo que não é um int ou // porque descobrimos uma nova linha com nada após //-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 () - 0-} retornar

A função abrir arquivo() solicita ao usuário o nome de um arquivo para abrir. A função de uma cria 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 a pFileStream opor-se a abertura falhar. Estas são as formas sorrateiras que vazamentos de memória se arrastam no.

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

Um último aviso: Não só não é nada voltou ao 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 acaba de ler o mesmo valor que ele leu anteriormente. Além disso, eof () nunca mais voltará a verdade em um fluxo de entrada que tem um erro.


Publicações relacionadas