Manipulando Arquivos
Produzido por Gustavo BarbosaTeoria
Introdução
Fala aí, aqui é o Guga do Responde Aí! Tudo bem com você?
Nós já sabemos como criar arquivos na linguagem C, mas como podemos ler ou adicionarmos mais informações nele através de um programa?
A resposta é bem simples, existem duas funções principais tanto para lermos quanto para escrevermos dados em um arquivo e hoje nós vamos conversar um pouco sobre elas.
Vem monstro!
Lendo dados de um arquivo
Imagine que nós temos um programa em que o usuário pode personalizar as configurações da maneira que ele preferir. Para que isso aconteça, o método que nós utilizamos para salvar essas configurações foi utilizar um arquivo que é carregado toda vez que o programa é iniciado para ser lido por ele.
Molezinha até agora, né? Para facilitar, vamos também imaginar que só existem as seguintes duas configurações para serem alteradas: tema e mostrar informações pessoais.
Com base nisso, temos o seguinte arquivo com a configuração do programa preferida de um suposto usuário:
Onde o tema do programa deve ser o escuro e a exibição das informações pessoais desse suposto usuário devem ser desabilitadas.
Sendo assim, como codificaríamos o nosso programa para ler esses dados e executar os comandos necessários de configuração?
Beleza, muita calma nessa hora!
Começando pelas declarações, para fazer isso nós iríamos precisar de uma string responsável por armazenar uma configuração lida do arquivo e de uma variável contadora de linhas desse arquivo.
Declarando tudo isso teríamos algo mais ou menos assim:
Após isso, nós também teríamos que abrir o nosso arquivo de configurações no modo de leitura, mas isso nós já sabemos fazer:
Com o arquivo aberto, nós podemos ler os dados armazenados nele da seguinte forma:
Onde nós utilizamos um laço de repetição while para criar dois loops com a variável contadora (já que sabemos que o arquivo se limita a duas linhas de configurações por conta de sua formatação configuração/linha) e utilizamos a função fscanf para ler a configuração de determinada linha e armazená-la na string do nosso programa.
Com licença, MAS QUE RAIOS DE FUNÇÃO É ESSA?
Vamos lá, a função fscanf é similar a função que nós já conhecemos chamada scanf, a grande diferença é que ao invés de armazenar uma entrada do teclado em uma variável ela lê essa entrada de um arquivo.
Para ficar fácil, mas muito fácil mesmo, vamos entendê-la de maneira geral:
Como conseguimos observar se trata de uma função que espera três parâmetros, o primeiro deles é o ponteiro para o arquivo que estamos trabalhando (no nosso exemplo é o ponteiro ), o segundo parâmetro é o especificador do tipo do dado que será lido do arquivo, no nosso caso utilizaremos o especificador “%s”, pois estaremos lendo strings (funciona também para os outros especificadores, exatamente da mesma maneira que a função scanf). O último parâmetro, por sua vez, é equivalente a variável que armazenará o dado lido do arquivo em nosso programa, no nosso caso estamos utilizando a string para armazenar as strings que serão lidas do arquivo.
Basicamente é isso, com essa simples linha de código nós iremos conseguir ler as configurações pessoais do suposto usuário no nosso programa fictício.
Mas não se iluda, devemos nos atentar que ao invés de apenas imprimirmos essa configuração (como fizemos na linha 11 da imagem exemplo após a abertura do arquivo), nós iríamos programar os comandos para que, nesse caso, o tema escuro do programa fosse aplicado e que as informações pessoais desse usuário fossem ocultadas (já que são as duas configurações que seriam lidas do arquivo exemplo).
Para finalizar, não podemos nos esquecer de fechar o arquivo que foi aberto para leitura após terminarmos as manipulações com ele:
Escrevendo dados em um arquivo
Agora nós já sabemos ler dados de um arquivo, mas como podemos escrever dados nele?
Simples! A estrutura é basicamente a mesma, começando pelas declarações teríamos algo mais ou menos assim:
Uma string chamada responsável por armazenar o conteúdo que será escrito no arquivo.
Em seguida, diferente do exemplo anterior, nós vamos criar um arquivo de texto chamado no modo de escrita (pode ser um arquivo existente desde que o mesmo seja aberto no modo de escrita):
Sendo assim, a grande diferença em relação a leitura de dados é que ao invés de utilizarmos a função fscanf, quando queremos escrever um dado em um arquivo nós devemos utilizar a função fprintf da seguinte forma:
Onde a única coisa que muda em relação a função fscanf é que o segundo parâmetro se refere ao especificador de tipo do dado que será escrito e o terceiro parâmetro a variável que contém esse dado.
Para finalizarmos a escrita basta fecharmos o arquivo:
Agora que já entendemos alguns dos conceitos de manipulações de arquivos, que tal resolvermos alguns exercícios de fixação?