Introdução aos arquivos

Ver Todos os Exercícios

Teoria

Introdução

Fala aí, aqui é o Guga do Responde Aí! Tudo bem com você?

No tópico de hoje nós iremos conversar um pouquinho sobre os arquivos na linguagem C, mas antes de começarmos, eu tenho uma pergunta:

Você sabe qual é a utilidade dos arquivos na programação em geral?

Por incrível que pareça, arquivos são extremamente importantes até os dias de hoje como ferramenta de armazenamento de dados.

Achou interessante? Então, vem comigo!

Arquivos

Os arquivos são utilizados para o armazenamento em massa de dados. Além disso, eles são armazenados em memória secundária.

Mas o que isso significa?

Memória secundária é um termo utilizado em computação para referenciar dispositivos que são capazes de armazenar grande quantidade de dados, além disso são dispositivos não voláteis, isso significa que os dados não são apagados quando o computador é desligado, diferentemente das memórias principais.

Eu sei que estamos entrando em termos mais voltado para a computação, mas para facilitar, quando falarmos de memória secundária lembre-se do seu pen-drive que mesmo fora de um computador guarda aquela apresentação que salva o semestre, do cartão S.D do seu celular que quando descarrega não apaga todas as suas fotos, quando a energia acaba e você não precisa reinstalar o sistema operacional etc.

Já pensou? Ainda bem que nada disso acontece!

Mas enfim, percebeu o porquê os arquivos são tão interessantes?

A capacidade de guardar um dado em uma execução de programa e poder recuperá-lo em outra execução é o princípio de sistemas muito mais modernos que são usados nos dias de hoje, os bancos de dados.

Arquivos de texto

A realidade é que existem milhares de tipos de arquivos, mas que os programas só enxergam dois tipos em específico. O primeiro deles é o arquivo de texto, nele os caracteres podem ser exibidos na tela e o mesmo pode até ser editado através de um editor de texto simples. Porém, também existem os arquivos binários, cujo conteúdo nada mais é do que uma sequência de bits que não podem ser lidos diretamente.

Infelizmente não falaremos sobre arquivos binários, pois eles exigem um conhecimento um pouquinho mais avançado.

Mas se a sua faculdade estiver cobrando isso, manda uma mensagem para nós que será um prazer para mim escrever sobre e conversar ainda mais com você!

Declarando um arquivo

Os arquivos são declarados e manipulados através de um tipo apontador para arquivo, observe essa declaração:

Lembre-se, esse tipo requer a inclusão da biblioteca padrão stdio. De forma geral, a declaração de um apontador para arquivo é feita da seguinte forma:

Agora que já tivemos uma introdução sobre os arquivos na linguagem C, que tal praticarmos um pouco esse conhecimento nos exercícios de fixação?

Criando ou abrindo um arquivo

Para utilizarmos um arquivo de texto nós precisamos primeiro abrir esse arquivo, não é mesmo?

Com um programa não é diferente, para que ele possa acessar dados ou escrever informações em um arquivo, primeiro ele deve abrir esse arquivo.

E isso pode ser feito da seguinte forma:

Onde o ponteiro m e u A r q u i v o receberá através da função fopen o endereço de memória de um arquivo com nome “arq.txt” aberto em um modo específico, esse que é passado como segundo parâmetro da função.

No exemplo anterior, o modo de abertura utilizado foi o “w”, isso significa que o arquivo será aberto em modo de escrita. Esse modo por sua vez tem uma peculiaridade... Se o arquivo “arq.txt” não existir, o mesmo será criado e aberto em modo de escrita. Caso ele já exista, será apenas aberto em modo de escrita.

O modo de escrita permite que nós possamos escrever informações em um arquivo.

Nós também podemos abrir arquivos em modo de leitura:

Só que diferentemente da abertura em modo de escrita, o arquivo “arq.txt” deve necessariamente existir, uma vez que esse modo de abertura não é capaz de criar arquivos.

O modo de leitura permite que nós possamos ler dados de um arquivo.

Vale ressaltar que os arquivos criados serão guardados no mesmo diretório em que o executável do programa está.

Fechando um arquivo

Assim como nós fechamos um arquivo após utilizá-lo, todo arquivo utilizado por um programa também deve ser fechado.

E isso pode ser feito facilmente da seguinte forma:

Onde basta utilizarmos a função fclose passando como parâmetro para ela o ponteiro responsável por armazenar o endereço de memória do nosso arquivo, que nesse caso é o ponteiro m e u A r q u i v o .

Arquivos

Arquivos de texto

Declarando um arquivo

Criando ou abrindo um arquivo

Fechando um arquivo

Exercícios Resolvidos

Exercício Resolvido #1

O que são os arquivos e qual é a sua utilidade na programação?

Passo 1

Um arquivo nada mais é do que um recurso de armazenamento. Porém, diferentemente das variáveis, quando armazenamos dados em um arquivos eles estão sendo alocados em uma memória especial que mantém os dados mesmo após o computador ser desligado.

Passo 2

Além disso, essa memória “especial” possui capacidade de armazenamento muito maior do que aquela em que as variáveis são alocadas, isso faz com que os arquivos muitas das vezes tenham a função de armazenar dados em massa já que os mesmos são alocados em espaços grandes o suficiente para isso.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #2

Explique a diferença entre memórias voláteis e não voláteis, além disso indique em quais dessas memórias os arquivos são alocados.

Passo 1

Memórias voláteis são aquelas em que variáveis são alocadas, elas possuem esse nome pois se caracterizam pela “exclusão” de todos os dados armazenados nela quando o computador é deligado, ou seja, um perfil de inconstância no armazenamento.

Diferentemente das memórias voláteis, as chamadas memórias não voláteis são aquelas que conseguem armazenar dados mesmo com o computador desligado, além disso são caracterizadas pela maior capacidade de armazenamento.

Passo 2

Como já sabemos os arquivos são utilizados para o armazenamento em massa de dados, além dessa necessidade de grandes espaços para alocação quando armazenamos dados em arquivos queremos que os mesmos sejam mantidos e por esse motivo eles são alocados em memórias não voláteis, também chamadas de memórias secundárias.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #3

Quais são os principais modos e as funções utilizadas na abertura de arquivos de texto na linguagem C?

Passo 1

Para ficar mais fácil, a tabela a seguir mostra para nós os principais modos de abertura de arquivos da linguagem C e as características de cada um deles:

Passo 2

Em relação as funções, nós utilizamos a função fopen para abrir arquivos de texto em nosso programa e a função fclose para fechá-los. Ambas estão presentes na biblioteca padrão stdio.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #4

Faça a declaração de um arquivo chamado a r q .

Passo 1

O trecho de código a seguir é responsável pela declaração do arquivo a r q :

A primeira coisa que nós temos que lembrar durante a declaração de um arquivo é que ela é feita através da declaração de um ponteiro para o tipo FILE.

Com base nisso, a primeira coisa que nós temos que mostrar para o programa é que estamos nos referindo ao tipo FILE seguido do operador * que indicará que se trata de um ponteiro para FILE. Por fim e separado por um espaço em branco basta colocarmos o nome do ponteiro para arquivo que criamos, que nesse caso é a r q , seguido de um ponto e vírgula para finalizar o comando de declaração (linha 03).

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #5

Desenvolva um programa capaz de criar e abrir um arquivo de texto no modo de gravação e escrita, imprimir uma mensagem dizendo se a criação foi um sucesso ou não e ao final da execução fechar esse arquivo.

Passo 1

O enunciado nos fornece todas as informações necessárias para desenvolver esse programa, por esse motivo já podemos definir o seu escopo:

Passo 2

Com o escopo definido, não podemos nos esquecer de declarar o ponteiro do tipo FILE que será responsável por apontar para o arquivo de texto:

Passo 3

Com o ponteiro m e u A r q u i v o declarado, podemos agora utilizar a função fopen para criarmos o arquivo e abri-lo no modo de leitura e gravação:

Após criarmos o arquivo não podemos nos esquecer de verificarmos se o ponteiro é diferente de nulo. Pois, caso seja, devemos imprimir na tela que a criação do arquivo de texto foi bem sucedida, caso contrário imprimir que a criação falhou.

Passo 4

Para finalizar, basta utilizarmos a função fclose para fechar o arquivo de texto que foi criado e aberto em nosso programa:

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #6

Observe o seguinte programa:

Substitua o comentário da linha 07 pelo comando que falta para que esse programa seja capaz de abrir e fechar um determinado arquivo de texto denominado “arq.txt”.

Passo 1

Logo de cara nós conseguimos perceber que o comando faltante nesse programa se trata da abertura do arquivo com a função fopen, já que após esse comando há um trecho de código que é responsável por verificar se o arquivo foi aberto corretamente ou não.

Mas só isso não é o suficiente para nós... Em que modo de abertura devemos abrir esse arquivo?

Moleza! Se analisarmos a imagem com mais calma, nós iremos perceber que na linha 10, linha responsável por imprimir a mensagem de confirmação de abertura do arquivo, existe a afirmação de que o arquivo será aberto no modo de leitura.

Passo 2

Sendo assim, sabendo que o arquivo se chama “arq.txt” e que o mesmo deve ser aberto no modo de leitura, basta completarmos o programa com a seguinte linha de código:

Isso fará com que o arquivo “arq.txt” seja aberto no modo de leitura e um ponteiro para ele seja atribuído a m e u A r q u i v o .

Resposta

Portanto, o comando faltante em nosso programa é:

Exercício Resolvido #7

Faça um programa capaz de abrir e fechar um determinado arquivo de texto chamado “arq.txt”. Sabe-se que esse programa é capaz unicamente de ler ou gravar informações e que um arquivo com esse nome deve ser criado durante a execução do programa caso não exista outro de mesmo nome.

Passo 1

A primeira coisa que nós temos que notar é que o enunciado não nos diz especificamente o modo de abertura desse determinado arquivo, mas nos diz que o programa é capaz unicamente de ler ou gravar informações e que o arquivo deve ser criado caso não exista.

Dessa forma, vamos dar uma olhada na nossa tabela que apresenta as características dos principais modos de abertura:

Já que podemos ignorar os dois modos que abrem um arquivo para leitura e gravação, a única alternativa que nos resta é o modo apenas de escrita, uma vez que o modo apenas de leitura não cria arquivos.

Passo 2

Agora que já sabemos o modo de abertura do arquivo de texto, podemos iniciar o desenvolvimento do nosso programa definindo o seu escopo:

Passo 3

Com o escopo do nosso programa definido, vamos agora declarar o ponteiro para FILE que será responsável por armazenar as informações do arquivo de texto dentro do nosso programa:

Passo 4

Agora que já temos o ponteiro m e u A r q u i v o criado, utilizaremos a função fopen para abrir o arquivo “arq.txt” em modo de gravação:

Em seguida, verificaremos se o ponteiro m e u A r q u i v o é diferente de nulo, caso seja, uma mensagem de que o arquivo foi aberto será impressa. Caso contrário, a impressão será de que houve uma falha ao abrir o arquivo.

Passo 5

Por fim, para fecharmos o arquivo basta utilizarmos a função fclose passando o ponteiro m e u A r q u i v o como parâmetro:

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #8

Suponha que você trabalha em uma empresa que armazena alguns dos dados de seus clientes em um arquivo denominado “dadosImportantes.txt”.

Em um determinado dia, devido a uma integração dos sistemas da empresa, a sua equipe foi designada a criar um programa capaz de atualizar todos os dados presentes nesse arquivo para um novo formato de armazenamento. Sendo assim, um de seus colegas de equipe decidiu iniciar o desenvolvimento desse programa.

Após alguns dias, esse mesmo colega te mostrou o seguinte código:

Após uma breve análise no código do programa, você identificou uma falha capaz de comprometer todos os dados presentes no arquivo.

Que falha é essa e qual alteração deve ser feita nesse código para que os dados sejam acessados e atualizados com segurança?

Passo 1

Bom, vamos começar com a primeira pergunta, qual é a falha que compromete os dados desse arquivo?

Quando nós analisamos a abertura do arquivo “dadosImportantes.txt”:

Percebemos que o mesmo foi aberto no modo de leitura e gravação que possui as seguintes regras:

  • Se o arquivo não existe, o mesmo é criado e aberto (não é o nosso caso).
  • Se o arquivo existe, o mesmo é aberto e todo o seu conteúdo é apagado (é o nosso caso).

Sendo assim, se esse programa for executado, nós perderemos todos os dados dos nossos clientes, pois o mesmo foi será aberto no modo w+.

Passo 2

Vamos agora para a segunda pergunta, como resolvemos esse problemão?

Simples, como o arquivo existe e não precisa ser criado, podemos utilizar o modo de abertura r+, que abrirá o arquivo tanto para leitura quanto para gravação.

A seguir temos o código alterado:

E pronto, com essa simples atualização nenhum dado será perdido! (e ninguém será demitido)

Resposta

Ei, a resposta está no passo a passo :)