110 likes | 211 Views
Laboratório de Técnicas de Programação. Slide 03 – Arquivos (continuação). Juliano Amorim de Oliveira juliano.oliveira@metodistademinas.edu.br. Instituto Metodista Isabela Hendrix Curso de Análise e Desenvolvimento de Sistemas. Arquivos binários. Motivação para Arquivos Binários.
E N D
Laboratório de Técnicas de Programação Slide 03 – Arquivos (continuação) Juliano Amorim de Oliveira juliano.oliveira@metodistademinas.edu.br Instituto Metodista Isabela Hendrix Curso de Análise e Desenvolvimento de Sistemas
Motivação para Arquivos Binários • Por que usar arquivos binários? Texto não é suficiente? • Variáveis int ou float têm tamanho fixo (por exemplo, 4 bytes) na memória • Representação em texto precisa de um numero variável de dígitos (10, 5.673, 100.340). • Armazenar em arquivos de movo análogo ao utilizado em memoria permite • Reduzir o tamanho do arquivo • Realizar buscas não seqüenciais
Arquivos binários e registros • Um arquivo pode armazenar registros (como um banco de dados) • O acesso a cada registro pode ser direto • Acesso aleatório • Com arquivos texto temos que ler o arquivo, seqüencialmente, até encontrar a posição desejada
Arquivos binários e registros • Imagine o seguinte registro • Podemos ter diversos registros desse tipo em um arquivo binário • Todos terão o mesmo tamanho Maria João Ciclano de Tal Nome Fulano de Tal José da Silva 48 20 37 idade 65 1500,00 salário 415,00 3200,00 2800,00
Arquivos binários e registros • Como todos os registros tem tamanhos fixos é possível pular o cursor de posição direto para um registro específico • Se eu quisesse mover para o início do terceiro registro bastaria mover para a posição • 2 * tamanho do registro José da Silva Fulano de Tal Ciclano de Tal Maria João 20 65 48 37 1500,00 415,00 3200,00 2800,00 cursor
Lendo e escrevendo em arquivos binários • Assim como os arquivos textos, arquivos binários precisam ser abertos antes de sua manipulação e fechados depois do término de seu uso • A forma de abrir arquivos binários é a mesma de arquivos texto • Na função fopen deve ser observado o modo de abertura • Por exemplo, se o arquivo será apenas lido usa-se “rb” e se será escrito “wb” • Não esquecer do sufixo b, que indica binário • O uso da função fclsose não tem alteração
Lendo e escrevendo em arquivos binários • Para ler e escrever em arquivos binários utilizaremos as funções fread e fwrite. • size_t fread (void *ptr, size_t size, size_t nmemb, FILE *parq); • size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *parq);
A função fread Tamanho, em bytes, de cada elemento Quantidade de elementos a serem lidos result = fread( &num , sizeof(int) , 1 , fp); O número de elementos lidos. Caso haja erro o retorno é menor ou zero. Variável onde serão armazenados os dados lidos Ponteiro de arquivo de onde os dados serão lidos
A função fwrite Tamanho, em bytes, de cada elemento Quantidade de elementos a serem lidos result = fwrite( &num , sizeof(int) , 1 , fp); O número de elementos escritos. Caso haja erro o retorno é menor ou zero. Variável onde serão recuperados os dados a serem escritos. Ponteiro de arquivo para onde os dados serão escritos.
Acesso aleatório • A função fseek permite alterar a posição de leitura/escrita no arquivo • int fseek(FILE *fp, long offset, int whence); • O deslocamento pode ser relativo ao • início do arquivo (SEEK_SET) • ponto atual (SEEK_CUR) • final do arquivo (SEEK_END)