Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação II Arquivos Prof. Raphael Vidal raphaelvidal9.webnode.com raphael.r.vidal@gmail.com roteiro • Conceito de arquivos • Funções de arquivos • Função de abertura de arquivo – fopen • Modos de abertura • Localização do arquivo • Operações com os arquivos – Capturar e escrever informações • Fechamento do arquivo Arquivos • Até agora trabalhamos com variáveis simples ou compostas para armazenar os dados necessários ao desenvolvimento de um programa. • Quando o programa era encerrado as informações eram perdidas, pois estavam apenas na memória do computador. • Para resolver esse problema e armazenar uma maior quantidade de informações, utilizaremos o arquivo (Não-volátil). • Arquivos em disco suportam acesso sequencial ou aleatório • À medida que cada caractere é lido ou escrito no arquivo, o indicador de posição é incrementado, possibilitando a progressão. Abertura e Fechamento • A manipulação de arquivos em disco é feita através de um stream, que está associado ao arquivo em disco. • O stream é uma sequência de bytes, utilizada no fluxo de dados entre a memória e o arquivo (vice-versa). • Esse stream é obtido na abertura do arquivo, realizando uma associação do stream em memória ao arquivo físico em disco. • No fechamento do arquivo é realizada a desassociação da stream com o arquivo, e seu conteúdo será escrito no destino (descarga ou flushing) Funções Arquivos • fopen() Abrir • fclose() Fechar • fputc() Escrever um caracter • fgetc() Lê um caracter • fseek() Posicionar em um byte específico • fprintf() Escreve uma cadeia • fscanf() Lê uma cadeia • fgets() Lê uma frase • feof() End Of File ? (Fim de Arquivo ?) • ferror() Ocorreu um erro ? • rewind() Reloca o indicador para o início • remove() Apaga o arquivo • fflush() Descarrega o arquivo Tipo FILE • Para abrir, alterar ou criar um arquivo em seu HD é necessário criar uma espécie de vínculo entre seu programa e um determinado endereço de memória, onde está localizado (ou vai se localizar) o arquivo. • Essa ligação é um pouco mais complexa e de 'baixo nível', mas isso não será motivo de preocupação, pois na linguagem C existe um tipo de dado, o FILE, que serve para trabalharmos especificamente com arquivos, e já está inclusive na biblioteca padrão do C, assim, podemos usar sem nos preocupar em incluir biblioteca ou criar algum código. Arquivos e Ponteiros Essa ligação, entre nosso programa e seu disco de dados é feita através de um ponteiro. Tal ponteiro é do tipo FILE, e o nome você escolhe. A sintaxe é a de criação de um ponteiro: FILE *ptr; Assim, nova variável ptr, do tipo FILE, será a relação entre nosso programa em C e o arquivo que iremos trabalhar. Porém, sabemos que o ponteiro deve apontar para um tipo específico de dados, que no nosso caso é o tipo FILE. Mas ele precisa apontar para 'alguém', só ter a referência (endereço de memória onde o ponteiro aponta) não serve de muita coisa. E é aí que entra a função fopen(). A função fopen() serve para especificarmos algumas características do arquivo. Especificamente, como pode ser visto na declaração desta função, precisamos fornecer dois dados: Endereço do arquivo no seu computador (representado por uma string) Modo de abertura do arquivo (outra string contendo o método de abertura) : ptr = fopen(“arquivo.txt”, “w”); http://www.cprogressivo.net/p/aprenda-tudo-sobre-ponteiros-em-c.html http://www.cprogressivo.net/p/strings-e-caracteres-em-c.html Abrir arquivo • Forma geral: ponteiro = fopen(arquivo, modo); • Exemplo: FILE *ptr; ptr = fopen(“arquivo.txt”, “w”); • Modos • r Abre para leitura (Read) • w Cria arquivo para escrita (Sobrescreve se já existir) • a Adiciona dados no final (append) Abrir arquivo • Ao abrir um arquivo, é retornado um ponteiro indicando o endereço de memória onde se inicia a stream. • Quando não é possível a abertura do arquivo, o valor NULL é retornado. • Exemplo: FILE *ptr; ptr = fopen(“arquivo.txt”, “w”); if (ptr == NULL) { printf("Não foi possível abrir!!!"); return 0; } Endereço do arquivo Para associar nossa variável ponteiro para um arquivo que será lido ou criado em seu computador, é necessário que você forneça a localização desse arquivo, afinal o C não pode adivinhar isso. Isso é feito através de uma string passada para a função fopen(), e essa string deve conter o endereço completo do arquivo, e isso inclui o nome do arquivo. Vamos supor que vamos trabalhar com um arquivo chamado "arquivo.txt". Se queremos usar este arquivo e ele está na MESMA PASTA (ou diretório) do seu executável, precisamos apenas fornecer o nome completo (com extensão) do arquivo: "arquivo.txt" Endereço do arquivo E caso ele esteja em outra pasta, como no C: ? Fornecemos o caminho inteiro, que é C:\arquivo.txt Porém, aqui vai um detalhe que é um erro bem comum entre iniciantes: para representar a barra "\" em uma string, usamos DUAS BARRAS: \\ Assim, nossa string seria: "C:\\arquivo.txt" Se o arquivo estiver numa pasta (vamos chamar de "meus_arquivos", dentro da pasta que está o executável, fazemos: "meus_arquivos\\arquivo.txt" Ou podemos pedir o endereço para o usuário, que poderá escrever usando apenas uma barra "\", pois a representação dela em string é "\\" e o C faz essa interpretação automaticamente. Fechar arquivo • Para fechar um arquivo, aberto anteriormente através da função fopen(), faz-se uso da função fclose(), passando o ponteiro como parâmetro. • Exemplo: FILE *ptr; ptr = fopen(“arquivo.txt”, “w”); if (ptr == NULL) { printf("Não foi possível abrir!!!"); return 0; } fclose(ptr); Escrevendo no arquivo • Para escrever num arquivo, pode-se utilizar as funções fputc() e fprintf(). • Além dessas funções, é necessário que o arquivo tenha sido aberto em um modo que permita a escrita. • Exemplo: FILE *ptr; ptr = fopen(“arquivo.txt”, “w”); if (ptr == NULL) { printf("Não foi possível abrir!!!"); return 0; } fprintf(ptr, "Texto escrito no arquivo..."); fclose(ptr); Lendo do arquivo • Para ler os dados de um arquivo, pode-se utilizar as funções fgetc() e fscanf(). • Além dessas funções, é necessário que o arquivo tenha sido aberto em um modo que permita a leitura. • Exemplo: FILE *ptr; char frase[100]; ptr = fopen(“arquivo.txt”, “r”); if (ptr == NULL) { printf("Não foi possível abrir!!!"); return 0; } fscanf(ptr, "%s", &frase); fclose(ptr); Leitura utilizando EOF Utilize o EOF para percorrer o arquivo até o final do mesmo. char texto[100]; // variável para receber texto FILE *p; while( (fscanf(p,"%s",texto))!= EOF ) printf("%s ",texto); Erro na abertura do arquivo Quando abrimos um arquivo, o ponteiro que criamos do tipo FILE armazenará o endereço de um arquivo. Porém, nem sempre esta tarefa é possível, gerando um erro. Quando este erro ocorre o ponteiro irá apontar para NULL, sendo essa prática (checagem se o ponteiro aponta para NULL) muito importante para o tratamento de erros na abertura de arquivos em C. Este erro pode ocorrer por vários motivos. O mais óbvio é abrir um arquivo que não existe (geralmente ocorre quando escrevemos errado o endereço do arquivo). Em sistemas operacionais mais seguros, como os Linux, o acesso aos arquivos (seja para leitura, escrita ou anexação) é geralmente limitado, não sendo possível acessar e alterar qualquer arquivo (como geralmente ocorre em sistemas mais vulneráveis, como o Windows). Caso você tente alterar ou acessar um arquivo sem permissão, a função fopen também irá retornar NULL para o ponteiro. if(arquivo == NULL) printf("Nao foi possivel abrir o arquivo!"); Remover arquivo • Digite a função remove e utilize como parâmetro o nome do arquivo. remove("nomearquivo.txt"); Exercício 1. Crie um programa que permite , através de funções e por uma quantidade indefinida de vezes realizar as seguintes opções: 1- criar um arquivo 2 - inserir dados no arquivo(sobrescrever) 3 - inserir dados no arquivo(acrescentar)4 - exibir conteúdo do arquivo 5 - excluir arquivo 6 – sair 2. Crie um programa que recebe 4 números através de um arquivo e mostra quais os são os números e o resultado da sua soma. 3. Crie um programa que recebe 4 nomes através de um arquivo e mostra quais os são os nomes Obrigado!!!
Compartilhar