O objetivo dessa unidade é apresentar o conteúdo relacionado a arquivos. Será feita uma abordagem focando na linguagem C.
Até o momento, as variáveis, cálculos e dados de nossos programas foram temporários. Ao se fechar um programa, tudo se perdia e ao iniciar nossos aplicativos, tudo começava do zero novamente. Porém, na prática, poucos programas funcionam assim.
A maioria dos programas que usamos armazena informações em algum lugar (HD, pendrive, banco de dados de um servidor etc) para, posteriormente, consultar essas informações de algum local.
Então, para trabalharmos com o armazenamento permanente utilizaremos a partir desse momento arquivos, nos quais os dados que forem utilizados nos programas poderão ficar armazenados para posteriormente serem utilizados.
A linguagem C trata os arquivos como uma sequência de bytes. Esta sequência pode ser manipulada de várias formas e para tanto, existem funções em C para criar, ler e escrever o conteúdo de arquivos independentemente de quais sejam os dados armazenados.
Em C, podemos utilizar dois tipos de arquivos: arquivo binário e arquivo de texto. Porém, nosso foco será tratar de arquivos em texto, como os de extensão .txt, que nada mais serão do que uma lista de caracteres (dígitos, letras e símbolos, como espaço e acentuação).
Em C, o arquivo é manipulado através de um ponteiro especial para o arquivo.
A função deste ponteiro é “apontar” a localização de um registro.
Sintaxe:
Exemplo de declaração de um ponteiro para arquivo em C:
Lembrando que FILE deve ser escrito em letras maiúsculas.
Para trabalhar com um arquivo, a primeira operação necessária é abrir este arquivo.
Sintaxe de abertura de arquivo:
A função fopen recebe como parâmetros o nome do arquivo a ser aberto e o tipo de abertura a ser realizado.
Observação: arquivo a ser aberto tem que estar no mesmo diretório do programa executado.
Tipos de abertura de arquivos:
Depois de aberto, realizamos as operações necessárias e fechamos o arquivo.
Para fechar o arquivo usamos a função fclose.
Sintaxe de fechamento de arquivo:
Lembrando que o ponteiro deve ser a mesma variável ponteiro associada ao comando de abertura de arquivo.
Exemplo de abertura e fechamento de arquivo:
Tela de execução
Possíveis problemas na abertura de arquivos
Na prática, nem sempre é possível abrir um arquivo. Podem ocorrer algumas situações que impedem essa abertura, por exemplo:
Quando o arquivo não pode ser aberto a função fopen retorna o valor NULL.
É recomendável criar um trecho de código a fim de verificar se a abertura ocorreu com sucesso ou não.
Vejamos:
Adicionando o trecho para verificação ao exemplo ficaria da seguinte maneira:
fprintf
A função fprintf armazena dados em um arquivo. Seu funcionamento é muito semelhante ao printf, a diferença principal é a existência de um parâmetro para informar o arquivo onde os dados serão armazenados.
Sintaxe:
Exemplo de abertura, fechamento e gravação de uma palavra em um arquivo:
Arquivo e tela de execução
fputs
A função fputs também grava dados em um arquivo, porém se restringe a gravar o conteúdo de uma variável string ou um texto definido no corpo da própria função.
Vejamos a sintaxe para os dois casos:
Exemplo de abertura, fechamento e gravação de uma frase em um arquivo:
Arquivo e tela de execução
Feof e EOF
EOF ("End of file") indica o fim de um arquivo. Às vezes, é necessário verificar se um arquivo chegou ao fim. Para isto podemos usar a função feof(). Ela retorna algo diferente de zero se o arquivo chegou ao EOF, caso contrário retorna zero. Seu protótipo é:
A verificação pode ser feita de duas maneiras equivalentes:
Outra forma de se verificar se o final do arquivo foi atingido é comparar o caractere lido por getc com EOF.
Leitura caracter por caracter – Função getc()
Faz a leitura de um caracter no arquivo.
Sintaxe:
Para realizar a leitura de um arquivo inteiro caracter por caracter podemos usar getc dentro de um laço de repetição. Por exemplo:
A leitura será realizada até que o final do arquivo seja encontrado.
Exemplo:
Arquivo e tela de execução
Leitura de strings – Função fgets()
É utilizada para leitura de strings em um arquivo. Realiza a leitura dos caracteres até o final da linha quando encontra o caracter \n ou até que o número de caracteres predefinidos seja atingido (o que ocorrer primeiro). A função também pode ser finalizada quando encontrar o final do arquivo. Quando finaliza ou quando acontece algum erro a função retorna um ponteiro nulo (NULL).
Sintaxe:
Exemplo:
Arquivo e tela de execução
Leitura com FSCANF
A função FSCANF funciona como a função SCANF, porém, ao invés de ler os dados de teclado, estes dados são lidos de arquivo.
Vamos compreender seu funcionamento através do exemplo:
Arquivo e tela de execução