Funções de membro de fluxo de arquivos de saída
Funções de membro de fluxo de saída tem três tipos: aqueles que são equivalentes a manipulators, aquelas que executam não formatado operações de gravação e aqueles que modificar o fluxo de estado e não têm equivalente manipulator ou operador de inserção.Para saída seqüencial, formatada, você pode usar somente os operadores de inserção e manipulators.Para a saída de disco de binários de acesso aleatório, você usar outras funções de membro, com ou sem operadores de inserção.
A função open para fluxos de saída
Para usar um fluxo de arquivo de saída (ofstream), você deve associar esse fluxo com um arquivo de disco específico no construtor ou o Abrir função.Se você usar o Abrir função, você pode reutilizar o mesmo objeto de fluxo com uma série de arquivos.Em ambos os casos, os argumentos que descrevem o arquivo são os mesmos.
Quando você abre o arquivo associado a um fluxo de saída, você geralmente Especifica uma open_mode sinalizador.Você pode combinar esses sinalizadores, que são definidos como enumeradores na ios classe, com o bit a bit ou operador (|).Consulte ios_base::openmode para obter uma lista os enumeradores.
Três situações comuns de fluxo de saída envolvem opções do modo:
Criando um arquivo.Se o arquivo já existir, a versão antiga é excluída.
ostream ofile( "FILENAME" ); // Default is ios::out ofstream ofile( "FILENAME", ios::out ); // Equivalent to above
Anexando registros a um arquivo existente ou criar um, se não existir.
ofstream ofile( "FILENAME", ios::app );
Abrindo os dois arquivos, um de cada vez, no mesmo fluxo.
ofstream ofile(); ofile.open( "FILE1", ios::in ); // Do some output ofile.close(); // FILE1 closed ofile.open( "FILE2", ios::in ); // Do some more output ofile.close(); // FILE2 closed // When ofile goes out of scope it is destroyed.
A função put
O colocar função grava um caractere no fluxo de saída.As duas instruções a seguintes são iguais, por padrão, mas o segundo é afetado pelos argumentos de formato do fluxo:
cout.put( 'A' ); // Exactly one character written
cout << 'A'; // Format arguments 'width' and 'fill' apply
A função de gravação
O escrever função escreve um bloco de memória para um fluxo de arquivo de saída.O argumento de comprimento especifica o número de bytes gravados.Este exemplo cria um fluxo de arquivo de saída e grava o valor binário de Date estrutura a ele:
// write_function.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;
struct Date
{
int mo, da, yr;
};
int main( )
{
Date dt = { 6, 10, 92 };
ofstream tfile( "date.dat" , ios::binary );
tfile.write( (char *) &dt, sizeof dt );
}
O escrever função não parar quando atingir um caractere nulo, portanto, a estrutura de classe completa é gravada.A função leva dois argumentos: uma char ponteiro e uma contagem de caracteres para escrever.Observe a conversão necessária para char * antes do endereço do objeto estrutura.
As funções seekp e tellp
Um fluxo de arquivo de saída mantém um ponteiro interno que aponta para a posição onde os dados estão a ser gravado em seguida.O seekp define esse ponteiro de função de membro e, portanto, fornece a saída de arquivo do disco de acesso aleatório.O tellp a função de membro retorna a posição do arquivo.Para obter exemplos que usam os equivalentes de fluxo de entrada para seekp e tellp, consulte as funções seekg e tellg.
A função Fechar para fluxos de saída
O Fechar a função de membro fecha o arquivo de disco associado a um fluxo de arquivo de saída.O arquivo deve ser fechado para concluir todas as saídas de disco.Se necessário, o ofstream destruidor fecha o arquivo para você, mas você pode usar o Fechar funcionar se você precisar abrir outro arquivo para o mesmo objeto de fluxo.
O destruidor de fluxo de saída fecha automaticamente se de um fluxo arquivo o construtor ou o Abrir a função de membro abriu o arquivo.Se você passar o construtor um descritor de arquivo para um arquivo já aberto ou use o Anexar a função de membro, você deve fechar explicitamente o arquivo.
Funções de processamento de erro
Use essas funções de membro para testar os erros ao gravar em um fluxo:
Função |
Valor de Retorno |
---|---|
Retorna true se não houver um erro irrecuperável. |
|
Retorna true se houver um erro irrecuperável ou uma condição "esperada", como, por exemplo, um erro de conversão, ou se o arquivo não for encontrado.Processamento com freqüência pode retomar após uma chamada para Limpar com um argumento de zero. |
|
Retorna true se não há nenhuma condição de erro (irrecuperável ou não) e o sinalizador de fim-de-arquivo não está definido. |
|
Retorna true sobre a condição de fim-de-arquivo. |
|
Define o estado de erro interno.Se a chamada com os argumentos padrão, ele limpa todos os bits de erro. |
|
Retorna o estado atual do erro. |
The ! operador está sobrecarregado para realizar a mesma função que o Falha função.Assim, a expressão:
if( !cout)...
é equivalente a:
if( cout.fail() )...
O void*() operador está sobrecarregado para ser o oposto da ! operador; Assim, a expressão:
if( cout)...
é igual a:
if( !cout.fail() )...
O void*() operador não é equivalente a BOM porque ele não testa o final do arquivo.