Baixe o app para aproveitar ainda mais
Prévia do material em texto
Prof. Edson J. R. Justino Prof. Claudio Carvilhe Parte 6 Pontifícia Universidade Católica do Paraná - PUCPR ARQUIVOS EM C � A biblioteca C oferece três categorias para manipulação de arquivos, que são: � Alto Nível São chamadas de buffered stream (rotinas de saída com área intermediária de memória) porque o buffer se interpõe entre o arquivo e o programa � Médio Nível São chamados de no buffered, porque o programa acessa o arquivo diretamente (através do sistema operacional SO). Não será abordada nesse estudo. � Baixo Nível Usam níveis não portáveis do BIOS, não será abordada nesse estudo. ARQUIVOS EM C � As rotinas de médio e alto nível possuem dois modos de manipulação de dados, o modo texto e o modo binário � Modo texto � É usado como arquivo texto, ou arquivos que armazenam texto no formato ASCII(programas fontes, etc.) � Modo binário � É usado em arquivos que armazenam dados na forma binária( imagens, sons, programas executáveis, etc.). � No modo texto, o caractere Ctrl+z (um byte contendo o valor 0x1A) é a marca de final de arquivo. � Nos arquivos binários Ctrl+z é uma parte legal (dado) do arquivo, o SO é quem guarda o tamanho do arquivo (no diretório). ENTRADA E SAÍDA EM ALTO NÍVEL � Todas as funções de I/O em alto nível, necessitam que se inicie o programa com #include <stdio.h>. Esse arquivo header, contém as definições para FILE, o tipo que se usa para manipular arquivos #include <stdio.h> . . FILE *fp; sendo *fp um ponteiro para a estrutura do tipo FILE. ENTRADA E SAÍDA EM ALTO NÍVEL � Abrindo um arquivo � Antes de você acessar um arquivo para leitura , gravação ou ambos, você deve inicialmente abrir o arquivo. Para as rotinas de I/O com buffers, você deve usar um ponteiro para o arquivo e abrir o mesmo com a função fopen( ) Ex: fp = fopen(nomearq, operação); Abrir p/ leitura, gravação ou ambos path - nome do arquivo ENTRADA E SAÍDA EM ALTO NÍVEL � Tabela de operações � Com a adição da letra b é possível manipular os arquivos binários. Ex. “rb”, “wb”, “ab”, “r+b”, “w+b” e “a+b” modomodo DescriDescriççãoão ““rr”” Abre para leitura apenas. O arquivo deve existir.Abre para leitura apenas. O arquivo deve existir. ““ww”” Abre para gravaAbre para gravaçção apenas. Cria o arquivo se não existir e apaga o antigo se jão apenas. Cria o arquivo se não existir e apaga o antigo se jáá existir e existir e cria um novo.cria um novo. ““aa”” Abre para inclusão. Grava novos dados no final do arquivo.Abre para inclusão. Grava novos dados no final do arquivo. ““r+r+”” Abre para Abre para leitura/gravaleitura/gravaççãoão. O arquivo deve existir.. O arquivo deve existir. ““w+w+”” Abre para Abre para leitura/gravaleitura/gravaççãoão. Cria o arquivo se não existir e apaga se j. Cria o arquivo se não existir e apaga se jáá existir criando um existir criando um novo.novo. ““a+a+”” Abre para Abre para leitura/gravaleitura/gravaççãoão, Grava novos dados no final do arquivo. Cria um novo arquivo , Grava novos dados no final do arquivo. Cria um novo arquivo se não existir.se não existir. ENTRADA E SAÍDA EM ALTO NÍVEL � Cada arquivo aberto requer um ponteiro para si #include <stdio.h> . . FILE *fp_in, *fp_out; . . fp_in = fopen("teste.txt","r"); fp_out = fopen("teste2.txt","w"); LENDO UM CARACTER DO ARQUIVO � O fgetc( ) é uma versão para arquivo da função getchar( ) � Ela retorna o próximo caractere lido do arquivo � Usando uma variável do tipo inteiro podemos identificar o final de arquivo facilmente. LENDO UM BYTE DO ARQUIVO if((ch= fgetc(fp)) == EOF) { /* Se for o final do arquivo */ } � A chamada para fopen( ) com o operador "rb" : fp = fopen(“nome do arquivo”, "rb") é uma declaração específica do PC. O "rb" habilita a abertura de arquivo binários LENDO UM CARACTER DO ARQUIVO � Tabela de definições modomodo DescriDescriççãoão tt texttext modemode -- converte converte carriegecarriege return/linereturn/line feedfeed em um em um lineline feedfeed na leitura e o na leitura e o contrcontráário na gravario na gravaçção. ão. Ctrl+zCtrl+z éé a marca de final de arquivo.a marca de final de arquivo. bb binarybinary modemode -- Elimina as conversões. O sistema operacional guarda o Elimina as conversões. O sistema operacional guarda o tamanho do arquivo.tamanho do arquivo. FECHANDO ARQUIVOS � Você deve fechar cada arquivo aberto após o uso. � Fechar um arquivo aberto para escrita significa atualizar a entrada do diretório para o arquivo e liberar o ponteiro de arquivo. if ( fclose(fp) == EOF) { /* Não habilitado p/ fechamento */ } Exemplo de leitura de arquivo texto /**************************************** Lista um arquivo texto ****************************************/ #include <stdio.h> /* para FILE e EOF */ int main() { FILE *fp; int ch; char nome_arquivo[50]; printf("entre com o caminho e nome do arquivo\n"); scanf("%s", nome_arquivo); fflush(stdin); if ((fp = fopen(nome_arquivo,"rt")) == NULL){ printf("Não abriu %s\n",nome_arquivo); system("PAUSE"); return(-1); } while ((ch = fgetc(fp)) != EOF){ printf("%c", ch); } if ( fclose(fp) == EOF) printf("arquivo não pode ser fechadio\n"); system("PAUSE"); return 0; }
Compartilhar