Programação C - Arquivos



 

              A linguagem C possibilita a manipulação de diferentes tipos de arquivos, estas são tratados de forma texto ou binário. Veja algumas funções relacionadas a arquivos:

 

Nome Função
fopen() Abre um arquivo
fclose() Fecha um arquivo
putc() / fpuc() Escreve um caracter em um arquivo
getc() / fgetc() Lê um caracter de um arquivo
fseek() Posiciona o arquivo em um byte específico
fprintf() Escreve em um arquivo
fscanf() Lê os dados de um arquivo
feof() Devolve verdadeiro se o final do arquivo foi atingido
ferror() Devolve verdadeiro se ocorreu um erro
rewind() Recoloca o indicador de posição de arquivo no início do arquivo
remove() Apaga um arquivo

 

              A diferentes formas de abrir um arquivo.

 

Modo Significado
r Abre um arquivo-texto para leitura
w Cria um arquivo-texto para escrita
a Anexa a um arquivo-texto
rb Abre um arquivo binário para leitura
wb Cria um arquivo binário para escrita
ab Anexa a um arquivo binário
r+ Abre um arquivo-texto para leitura/escrita
w+ Cria um arquivo-texto para leitura/escrita
a+ Anexa ou cria um arquivo-texto para leitura/escrita
r+b Abre um arquivo binário para leitura/escrita
w+b Cria um arquivo binário para leitura/escrita
a+b Anexa ou cria um arquivo binário para leitura/escrita

 

              Para exemplificar a manipulação de arquivos em linguagem C, vou criar um programa com as possibilidades de criar um arquivo TXT, incluir novos dados neste arquivo ou listar os dados contidos no arquivo.

              Vou fazer tudo com funções, começando com o menu onde tem-se a possibilidade de criar, limpar e listar o conteúdo, retornando a opção escolhida.

 

 

              A função MainArquivos fica responsável por direcionar as opções do usuário.

 

 

              Para trabalharmos com arquivos, temos que criar um novo tipo de variável. Para este caso criamos uma variável PONTEIRO, do tipo FILE (arquivo). Isto significa que a variável “arq” poderá receber endereços de arquivos e toda a manipulação se dará pelo endereço do arquivo.

FILE *arq;

 

              Para manipular o arquivo temos que primeiramente abrir o arquivo utilizando a função “fopen”. Esta função aceita dois argumentos, o primeiro é o nome do arquivo que se pretende abrir e o segundo é o modo de abertura, neste caso “w” para criação e escrita.

              Quando um arquivo é aberto no modo de escrita “w”, significa que caso o arquivo não exista ele será criado e caso já exista ele é “zerado”, ou seja todo o seu conteúdo é excluído e recria o arquivo limpo.

arq = fopen(“arquivo.txt”, “w”);

 

              Para escrever em um arquivo é utilizado a função “fprintf()”. Esta função aceita dois argumentos, o primeiro é o ponteiro do arquivo que vai receber o conteúdo, o segundo é o conteúdo propriamente a ser inserido no arquivo. Caso sejam várias linhas a serem inseridas, o ideal é utilizar um loop.

fptintf(arq, “conteúdo a ser inserido”);

 

              Sempre após manipular o arquivo, este deve ser criado para evitar problemas de arquivos corrompidos.

fclose(arq);

 

 

              Para incluir dados em um arquivo, este deve ser aberto com o argumento “a”. Neste caso, os novos dados serão incluídos ao final do arquivo, mantendo o conteúdo que já possuía. Caso não exista, cria um novo arquivo.

              Aqui estou utilizando 3 argumentos na função “fprintf”. O primeiro é o ponteiro do arquivo que vai receber o dado. O segundo é o dado a ser inserido, mas como a informação vem de uma variável, é colocado o “%s” para “string”, e colocar a variável no terceiro argumento.

fprintf(arq, “%s\n”, texto);

 

 

              Para abrir um arquivo para leitura, este deve ser aberto com o argumento “r” de “read”. A função utilizada é o “gets”, este possui 3 argumentos: o primeiro é a variável que vai receber o conteúdo, o segundo é a quantidade de caracteres que serão lidos e o terceiro é o ponteiro do arquivo propriamente. A leitura será da quantidade estipulada ou até encontrar o final de linha.

fgtes(texto, 100, arq);

Outra questão aqui a observar é o loop de leitura, onde a condição de final do loop é a verificação se a leitura chegou ao final do arquivo por intermédio da função “feof”.

while ( !feof(arq) )

 

 

              Outra opção de leitura, é a de caracter por caracter. Neste caso utilizamos a função “fgetc”, esta pega apenas um caracter a cada leitura e armazena em uma variável do tipo “char”.

ch = fgetc(arq);

 

 

              Neste exemplo, estou utilizando a função “fgetc” para ler caracter a caracter. No entanto para imprimir o resultado, observe que estou pedindo para apresentar o caracter “%c” e o decimal “%d” da variável. O valor numérico a ser apresentado é o valor da tabela ASCII do referido caracter. Isto é muito útil quando queremos vasculhar arquivos.

printf(“%c - %d \n”, ch, ch);

 

 

 

 

 

 

 


Exercícios

 

1) Criar um programa em C que possibilite a gravação e leitura de textos digitados por um usuário em um arquivo TXT.

 

2) Criar um programa em C que possibilite gravar em um arquivo TXT a tabuado dos números de 1 a 10.

 

3) Criar um arquivo em Excel com os seguintes dados de 50 pessoas que efetuaram compras em um determinado supermercado: Nome, idade, valor gasto, data da compra. Após criar este arquivo, salvar no formato TXT e criar um programa em C para ler os dados deste arquivo TXT criado.

 

4) Com base no arquivo TXT do exercício, criar um programa para ler este arquivo e gerar um novo arquivo com as seguintes características:

 

  • a) Cada linha terá os dados de um cliente;

  • b) Os dados deverão estar na sequência: nome, idade, valor gasto, data;

  • c) Nome deverá ter exatamente 30 caracteres;

  • d) Idade deverá ter exatamente 4 caracteres;

  • e) Valor da compra deverá ter exatamente 10 caracteres;

  • f) Data deverá ter exatamente 8 caracteres.

  • g) Total de caracteres por linha: 52;

  • h) Completar dados alfabéticos com espaço em branco a direita;

  • i) Completar dados numéricos com zeros a esquerda.