•
Arquivos - Acesso Sequêncial
C++ não impõe nenhuma estrutura a um arquivo. Assim, conceitos como o de regitros
não existem em arquivos em C++. Portanto, o programador deve estruturar os arquivos
de modo a satisfazer as exigências das aplicações.
Arquivos são abertos criando-se objetos das classes stream ifstream, ofstream
ou fstream.
Ofstream é um objeto, seus modos de abertura do arquivo pode ser tanto ios::out,
que trunca o arquivo ou, se ele não existir, cria. E ios::app que acrescenta
no final do arquivo.
A declaração
ofstream Arquivo( "arquivo.txt", ios::out
0);
Abre um arquivo para saida ( incluir dados no arquivo ).
| ios::app |
Grava toda a saida no fim do arquivo |
| ios::ate |
Abre um arquivo para saída e avança até o fim do arquivo ( normalmente usado
para acrescentar dados a um arquivo ). Os dados podem ser gravados em qualquer
lugar no arquivo. |
| ios::in |
Abre um arquivo para entrada |
| ios::out |
Abre um arquivo para saida |
| ios::trunc |
Elimina o conteúdo do arquivo se ele existe ( esta também é a ação default
para ios::out ) |
| ios::binary |
Abre um arquivo para entrada ou saída binária ( não texto ) |
Incluindo dados em um arquivo sequencial
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::cerr;
using std::ios;
#include <fstream>
using std::ofstream;
#include <cstdlib>
int main()
{
// abre um arquivo
ofstream arquivo ( "arquivo.txt", ios::out );
// operador !
sobrecarregado, verifica se tudo ocorreu bem
if ( !arquivo )
{
cerr << "Arquivo nao pode ser aberto" << endl;
// prototipo cstdlib
exit( 1 );
}
cout << "Digite o Nome e Idade" << endl;
char nome[30];
int idade = 0;
int total = 1;
while ( total <= 5 )
{
total++;
cin >> nome >> idade;
arquivo << nome << ' ' << idade << '\n';
}
// arquivo.close(); //fecha explicitamente
// neste caso,
return destroi ofstream e fecha arquivo
return 0;
}
- Tente sempre fechar explicitamente os arquivos abertos.
Lendo dados de um arquivo de acesso sequencial
Para abrir o arquivo criado anteriormente, usamos ifstream.
Ifstream recebe dois argumentos :
ifstream arquivo("arquivo.txt", ios::in );
Exemplo:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::cerr;
using std::ios;
#include <fstream>
using std::ofstream;
// detalhe
using std::ifstream;
#include <cstdlib>
#include <iomanip>
using std::setiosflags;
using std::resetiosflags;
using std::setw;
using std::setprecision;
// prototipo de saida de linha personalizada
void saida( const char * const, int );
int main()
{
// abre um arquivo
ofstream arquivo ( "arquivo.txt", ios::out );
// operador ! sobrecarregado, verifica se
tudo ocorreu bem
if ( !arquivo )
{
cerr << "Arquivo nao pode ser aberto" << endl;
// prototipo cstdlib
exit( 1 );
}
cout << "Digite o Nome e Idade" << endl;
char nome[30];
int idade = 0;
int total = 1;
while ( total <= 5 )
{
total++;
cin >> nome >> idade;
arquivo << nome << ' ' << idade << '\n';
}
// fim da inclusão
arquivo.close();
// abre o arquivo para
leitura
ifstream lendo ( "arquivo.txt", ios::in );
if ( !lendo )
{
cerr << "Arquivo nao pode ser aberto" << endl;
exit( 1 );
}
cout << endl << endl;
cout << setiosflags( ios::left ) << setw(13) << "Nome" << setiosflags(
ios::left ) << setw(10) << "Idade" << endl;
while ( lendo >> nome >> idade )
{
saida( nome, idade );
}
// neste caso, return destroi ofstream e fecha arquivo
return 0;
}
void saida( const char * const nome, int idade )
{
cout << setw(13) << nome << setiosflags( ios::left ) << setw(10) << idade << endl;
}
|