Você está na página 1de 12

Tcnicas de Programao I

Conceitos bsicos C/C++

Material baseado em sites da internet em especial no livro: STARTING OUT WITH C++

C++: Manipulao de Arquivos


(1) ifstream : leitura (2) ofstream : escrita (3) fstream : leitura e escrita

C++: Objeto fstream


Declarao: fstream arquivo; Somente Leitura: file.open(myfile.dat,ios:in); Somente Escrita: file.open(myfile.dat,ios:out); Leitura e Escrita: file.open(myfile.dat, ios:in|ios:out);

Modos de abertura de arquivos

Especifica como o arquivo deve ser aberto e o que pode ser feito com ele ios:in e ios:out so exemplos de modos de abertura de arquivos,
file mode flags (flags de abertura de arquivos)

Flags de abertura podem ser combinados e passados como o segundo parmetro na abertura do arquivo

Flags de Abertura

ios::app ios::ate ios::binary ios::in ios::out

Cria novo arquivo, ou adiciona ao final de um arquivo existente Vai para o final do arquivo; escreve em qquer lugar L/escreve em modo binrio Abre para leitura Abre para escrita

Flags de Abertura
Nem todas as cobinaes fazem sentido ifstream e ofstream possuem modos default, logo o segundo parmetro da funo open opcional

Modos Default
ofstream:
Abertura somente para escrita No so permitidas leituras Se no existe o arquivo ele criado O contedo apagado caso o arquivo exista Para associar outro comportamento: ofstream gradeList("grades.dat", ios::app);

ifstream:
Abertura somente para escrita No permitido escrever no arquivo A abertura falha caso o arquivo no exista

Abertura de Arquivos para Escrita e Leitura


Leitura e Escrita simultnea em arquivos
Leitura de dados do arquivo memria Atualizao dos dados Escrita dos dados atualizados no arquivo

Utilizao do objeto fstream : fstream gradeList("grades.dat", ios::in | ios::out);

Detentando erros na abertura


(1) Funo fail() da stream inFile.open(myfile); if (inFile.fail()) { cout << Erro abertura do arquivo; exit(1); }

Detecting File Open Errors


(2) Testar o status da stream utilizando o operador ! inFile.open(myfile); if (!inFile) { cout << Erro abertura do arquivo; exit(1); }

Formatao da sada
Utilizao de manipuladores
Idnticos aos manipuladores em cout left, right oct, dec, hex endl, flush showpos, noshowpos left or right justify output display output in octal, decimal, or hexadecimal write newline (endl only) and flush output do, do not show leading + with non-negative numbers do, do not show decimal point and trailing zeroes

showpoint, noshowpoint

Formatao da sada
fixed, scientific setw(n) setprecision(n) setfill(ch) use fixed or scientific notation for floatingpoint numbers sets minimum field output width to n sets floating-point precision to n uses ch as fill character

Deteco de Erros
eof() fail() bad() good() clear() true if eofbit set, false otherwise true if failbit or hardfail set, false otherwise true if badbit set, false otherwise true if goodbit set, false otherwise clear all flags (no arguments), or clear a specific flag

Bits de Estado de Erro


ios::eofbit ios::failbit ios::hardfail ios::badbit ios::goodbit set when end of file detected set when operation failed set when an irrecoverable error occurred set when invalid operation attempted set when no other bits are set

Funes de Leitura e Escrita


Diferentemente do operador >>, estas funes no pulam espaos em branco:
getline: l uma linha get: l um caracter

Funo getline
getline(char s[ ], int max, char stop =\n) char s[ ]: varivel para armazenar o valor lido int max : nmero mximo de caracteres a serem lidos char stop: caracter de trmino de leitura caso o numero mximo max no tenha sido atingido

13.7 Arquivos Binrios


Arquivos Binrios armazenam os dados no mesmo formato que em memria principal (RAM) Arquivos texto armazenam os dados no formato ascii (strings) Arquivos so abertos por default no modo TEXTO

Manipulao de arquivos Binrios


Flag ios::binary na abertura do arquivo
infile.open(myfile.dat,ios::binary);

Funes read e write para leiitura e escrita


read(char *buffer, int numberBytes) write(char *buffer, int numberBytes)

Funo: read e write


read(char *buffer, int numberBytes) write(char *buffer, int numberBytes) buffer: varivel a ser utilizada para armazer o valor a ser lido do arquivo numberBytes: nmero de bytes a serem lidos

Exemplo: write
Para escrever um vetor de doubles ofstream outFile(myfile, ios:binary); double d[2] = {12.3, 34.5}; outFile.write( reinterpret_cast<char *>(d), sizeof(d) );

10

Exemplo: read
Para ler dois doubles para um vetor

ifstream inFile(myfile, ios:binary); double data[2]; inFile.read( reinterpret_cast<char *>(data), 2*sizeof(double) );

Trabalhando com Registros


Para escrever e ler registros (struct) em arquivos
Utilizar binary flag na abertura Utilizar as funes read, write

11

Struct + arquivos: Exemplo


struct T_aluno { int matricula; float nota; char nome[20]; }; T_aluno aluno; ... // escreve o registro no arquivo gradeFile.write( reinterpret_cast<char*>(aluno), sizeof(aluno));

Exerccios
Implemente um programa que obtm do usurio os seguintes dados de uma pessoa: nome, endereo, telefone e idade. Estes dados devem ser escritos num arquivo binrio como registros.

12

Você também pode gostar