140 likes | 289 Views
Arquivos. associado a um dispositivo de armazenamento pode ser tratado como stream sequência de bytes sequência de registros (estruturas) acesso sequencial aleatório. 0 1 2 3 4 5 ...... N-1 eof.
E N D
Arquivos • associado a um dispositivo de armazenamento • pode ser tratado como stream • sequência de bytes • sequência de registros (estruturas) • acesso • sequencial • aleatório 0 1 2 3 4 5 ...... N-1 eof 0 29 30 59 60 89 90 129 ...... Nome1 fone1 nome2 fone2 nome3 fone3 nome4 fone4 ...... 0 1 2 3 ......
Arquivos Estratégias: • Funções em C • fopen – abre ou cria um arquivo • fread – realiza a leitura de um arquivo • fwrite – realiza a escrita em um arquivo • fclose – fecha um arquivo OU: • Objetos em C++ • Contrutor: cria ou abre o arquivo • Stream: escreve ou lê dados • Destrutor fecha o arquivo
Arquivos Infra-estrutura necessária: Sistema Operacional: manutenção do sistema de arquivos (file systems) gerenciamento de acessos interfaces com dispositivos físicos Dispositivos físicos discos magnéticos – trilhas/setores/clusters C:\teste.doc Unidade física, restrições de acesso, tamanho, início, encadeamento, organização(cluster) Acesso a uma trilha e setor
Arquivos Discos Magnéticos: Trilhas concêntricas Cilindros: junção das trilhas de mesma localização relativa nas diversas superfícies Setores: unidades de armazenamento (512 bytes) Cluster: agrupamento de setores (S.O.) Densidade armazenamento : 10-15 Gbits/pol2 300 – 500 mil BPI (bits per inch) em cada trilha 2.000 TPI (tracks per inch) -> 0,635 nm full stroke : 15 a 20 ms (67hz) Trilhas adjacentes: 1 e 2 ms Base: alumínio/magnésio vidro (ibm) Tempo Acesso: busca+latência rotacional+comandos Latência média: 5.400 rpm -> 5,56 ms 7.200 rpm -> 4,17 ms 10.000 rpm -> 3,00 ms Busca média: 8,5 -> 6,5 ms
Arquivos chkdsk a: O número de série do volume é F815-97A8 1.457.664 bytes de espaço total em disco 1.165.824 bytes em dois arquivos do usuário 291.840 bytes disponíveis no disco 512 bytes em cada unidade de alocação 2.847 total de unidades de alocação no disco 570 unidades de aloc. disponíveis no disco Tamanho: 1.4 Mbytes Cluster: 512 bytes
Arquivos chkdsk c: volume WINME criado em 30/9/2000 as 18hs O número de série do volume é 3952-18FB 10.006.696 kilobytes de espaço total em disco 1.731.424 kilobytes disponíveis 8.192 bytes em cada unidade de alocação 1.250.837 total de unidades de alocação no disco 216.428 unidades de aloc. disponíveis no disco Tamanho: 10 Gbytes Cluster: 8 Kbytes
Arquivos chkdsk d: 4.285.173.760 bytes de espaço total em disco 444.342.272 bytes em 742 arquivos ocultos 10.731.720 bytes em 2.044 pastas 3.673.260.032 bytes em 32.772 arquivos de usuário 156.807.168 bytes disponíveis no disco 4.096 bytes em cada unidade de alocação 1.046.185 total de unidades de alocação no disco 38.283 unidades de aloc. disponíveis no disco Tamanho: 4 Gbytes Cluster: 4Mbytes
Arquivos Fragmentação externa: - ferramentas de desfragmentação do sistema operacional Fragmentação interna - tratamento com administração de partições de disco Cluster 0 Cluster 1 Cluster 2 Cluster 3 Cluster 4
Arquivos Fragmentação externa: - ferramentas de desfragmentação do sistema operacional Fragmentação interna - tratamento com administração de partições de disco Cluster 0 Cluster 1 Cluster 2 Cluster 3 Cluster 4
Arquivos Estratégias: Funções em C Exemplo: leitura de caracteres de arquivo para monitor #include <stdio.h> #include <stdlib.h> void main(){ FILE *fp; //ponteiro para arquivo char c; fp =fopen(“nome.txt”, “r”); If (fp==NULL) exit(0); while ( (c= fgetc(fp)) != EOF){ cout.put(c); } fclose(fp); }
Arquivos Estratégias: Objetos em C++ Exemplo: arquivo de clientes #include <iostream> using namespace std; #include <fstream> #include <cstdlib> int main() { int aux_cod; char aux_nome[30]; char aux_fone[30]; ofstream arquivoCliente( "cliente.dat", ios::out ); if ( !arquivoCliente ) { // testa abertura do arquivo cerr << "Arquivo não pode ser aberto!" << endl; exit( 1 ); } cout<<"Digite o código, nome e fone dos clientes: "<<endl; while ( cin >> aux_cod >> aux_nome >> aux_fone ) { arquivoCliente << aux_cod << ' ' << aux_nome << ' ' << aux_fone << '\n'; cout << "Mais um ? "; } return 0; }
Arquivos Declaração do objeto e parâmetros para construtor Estratégias: Objetos em C++ Exemplo: arquivo de clientes #include <iostream> using namespace std; #include <fstream> #include <cstdlib> int main() { int aux_cod; char aux_nome[30]; char aux_fone[30]; ofstream arquivoCliente( "cliente.dat", ios::out ); if ( !arquivoCliente ) { // testa abertura do arquivo cerr << "Arquivo não pode ser aberto!" << endl; exit( 1 ); } cout<<"Digite o código, nome e fone dos clientes: "<<endl; while ( cin >> aux_cod >> aux_nome >> aux_fone ) { arquivoCliente << aux_cod << ' ' << aux_nome << ' ' << aux_fone << '\n'; cout << "Mais um ? "; } return 0; } Sobrecarga de operadores: testa Se abertura do arquivo está ok! Operadores de inserção em stream para a escrita no arquivo! 1 nome1 fone1 2 nome2 fone2 3 nome3 fone3
Arquivos Estratégias: Objetos em C++ Exemplo: arquivo de clientes #include <iostream> using namespace std; #include <fstream> #include <cstdlib> int main() { int aux_cod; char aux_nome[30]; char aux_fone[30]; ifstream arquivoCliente( "cliente.dat", ios::in ); if ( !arquivoCliente ) { // testa abertura do arquivo cerr << "Arquivo não pode ser aberto!" << endl; exit( 1 ); } cout<<“Dados no arquivo: "<<endl; while (arquivoCliente >> aux_cod >> aux_nome >> aux_fone ) { cout << aux_cod << ‘ ' << aux_nome << ‘ ' << aux_fone << endl; } return 0; }
Arquivos Funções membro auxiliares seekg, seekp – permitem o posicionamento de ponteiros para leitura e gravação. Pode-se indicar um número de bytes a partira da posição corrente, do início do arquivo ou do final do arquivo (ios::curr, ios::beg, ios::end) ex.: arquivoCliente.seekg(n); arquivoCliente.seekg(n, ios::curr); tellg, tellp - permitem recuperar a posição corrente dos ponteiros de leitura e gravação ex.: arquivoCliente.seekg(0, ios::end); posicao= arquivoCliente.tellg(); //posição equivale ao tamanho do arquivo