Você está na página 1de 8

Linguagem de Programação II

5º Aula

ARQUIVOS

Nesta aula, vamos aprender como manipular arquivos externos. Arquivos do tipo texto,
onde podemos gravar dados de maneira permanente.
Segundo Deitel (2006)
O armazenamento de dados em variáveis e arrays é temporário. Os arquivos
são utilizados para persistência de dados – retenção permanente de grandes
quantidades de dados. Os computadores armazenam arquivos em dispositivos
de armazenamento secundários, como discos magnéticos, discos ópticos e fitas
(Deitel, 2006, p.)
Como vimos, o armazenamento de valores em variáveis é temporário, pois toda vez que
o programa termina a execução, as variáveis são destruídas (da memória) e os seus valores
se perdem. Caso seja necessário manter esses valores mesmo depois de o programa ter sido
terminado, uma boa solução é manipular arquivos. Assim, os dados ficam seguros e podem
ser reutilizados quantas vezes forem necessárias. Veremos nesta aula como utilizar as principais
funções de manipulação de arquivos.
O processo de manipular arquivos na linguagem C é dividido em três etapas:
• abrir o arquivo;
• ler e/ou gravar as informações nesse arquivo;
• fechar o arquivo.
A biblioteca utilizada para manipulação de arquivos é stdio.h ou cstdio (C Standard Input
and Output Library, ou em português, C (do nome da linguagem) Biblioteca Padrão de Entrada
e Saída).
Bons estudos!

Objetivos de aprendizagem

Ao término desta aula, vocês serão capazes de:

• criar arquivos no disco rígido;


• abrir arquivos existentes;
• ler o conteúdo de um arquivo;
• escrever em arquivos;
• alterar o conteúdo de um arquivo;
29
e até mesmo criação de arquivos, a sintaxe está logo abaixo e
Seções de estudo os modos de acesso podem ser vistos na Tabela 1.1.
O modo de acesso ao arquivo é a maneira como o arquivo
será manipulado, pode ser para escrita, leitura ou os dois. Para
1 – Stream diferenciar as maneiras de abrir um arquivo, são utilizados os
2 – Função fopen e fclose modos de acesso, que veremos mais a frente.
3 – Função getc
4 – Função fgets O ponteiro FILE
5 – Função putc O ponteiro FILE é um ponteiro que identifica um
6 - Função fputs arquivo específico e é usado pela stream para direcionar as
operações das funções de Entrada e Saída a esse arquivo.

1 - Stream Ponteiros para manipulação de arquivos sempre serão do


tipo FILE, que é um tipo predefinido pela linguagem C. FILE
A linguagem C não faz distinção entre dispositivos de também faz parte da biblioteca stdio.h.
armazenamento ou de entrada/saída de dados enquanto o
arquivo está sendo processado. Não importa se o arquivo REGRA
que está sendo lido está no disco rígido, em uma unidade de Para manipular um arquivo, SEMPRE crie um ponteiro
leitura/gravação (um pendrive) ou até mesmo em um outro do tipo FILE
computador de uma rede. Para a linguagem C isso não faz
diferença, porque esses arquivos são tratados como streams.
Até mesmo os dados vindos do teclado, são entendidos como Sintaxe para criação do ponteiro FILE:
um arquivo - stream.
FILE * nome_ponteiro;
Mas o que é um stream?
Segundo Oliveira (2008) Onde:
FILE -> tipo predefinido pela linguagem C que indica
Um stream consiste em uma sequência de um arquivo.
bytes, similar a um array unidimensional de * -> indica que a variável é do tipo ponteiro
bytes. Stream é um conceito importante da nome_ponteiro -> é o nome da variável do tipo
programação em C e outras linguagens, pois ponteiro, que será usada para manipular o arquivo que será
ele provê uma interface lógica comum a associado a ela, mais tarde.
quaisquer dispositivos de entrada e saída. Do
modo como C considera conceito de arquivo,
Sintaxe para abertura de um arquivo:
ele pode referir-se a um arquivo armazenado
em disco rígido, ao monitorde vídeo, ao
nome_da_variável=fopen(“nome_do_
teclado, a uma porta de comunicação, etc. O
arquivo”,”modo_de_acesso”);
conceito de stream permite tratar todos estes
dispositivos (arquivos) do mesmo modo
Onde:
e o programador não precisa preocupar-
nome_da_variável -> deve ser a variável do tipo
se com as diversas diferenças entre eles
ponteiro que foi definida como sendo FILE, que deve ser
(OLIVEIRA, 2008, p.584-585)
criada/declarada antes de abrir o arquivo.
fopen -> função da biblioteca stdio.h, utilizada para
Toda vez que um arquivo é aberto, um stream é
associar um arquivo a uma stream, e que poderá ser acessada
associado a ele, e por meio dessa associação é possível realizar
pelo “nome_da_variavel”. Independentemente do modo de
as operações de escrita e leitura nesse arquivo. Por isso, é
acesso que será utilizado (leitura, gravação ou ambos), sempre
importante entender o conceito de stream.
há a necessidade de utilizarmos a função fopen.
nome_do_arquivo -> sempre entre aspas duplas, diz
Já entendemos o que são streams, vamos ver agora como
respeito ao endereço (incluindo o seu caminho completo)
abrir um arquivo existente, criar um novo arquivo e fechar os
onde o arquivo está/será armazenado.
arquivos abertos anteriormente.
modo_de_acesso -> é o indicador, que diz se o arquivo
está sendo aberto para leitura, gravação ou ambos.
2 - Função fopen e fclose
Veja na figura abaixo, os principais modos de acesso
utilizados para manipulação de arquivos
A função fopen() abre uma stream para uso e associa um
arquivo a ela. Ela retorna o ponteiro de arquivo associado a
esse arquivo, permitindo que o arquivo possa ser manipulado.
Esta função nos permite abrir arquivos para leitura, gravação
Linguagem de Programação II 30
FIGURA 5.1: MODOS DE ACESSO A ARQUIVOS Já aprendemos a abrir o arquivo, mas não o fechamos,
e isso pode nos causar muitos transtornos, como deixar o
arquivo bloqueado, e não ser possível abri-lo de outra maneira.
Agora, vamos ver como fechar o arquivo. Esse processo é
bem simples, e deve ser realizado apenas quando todas as
operações sobre o arquivo já tiverem sido terminadas, veja a
sintaxe a seguir:

Sintaxe:
fclose(ponteiro_para_arquivo);
Onde:
fclose -> é a função que efetivamente vai fechar o
arquivo e retirá-lo da memória.
ponteiro_para_arquivo -> variável do tipo ponteiro
para FILE que foi criada anteriormente.

FIGURA 5.4: FECHANDO O ARQUIVO.

Fonte: criação nossa

Vamos ver um exemplo?


Exemplo: Criar um programa que deverá abrir um
arquivo somente para leitura, que consta no mesmo diretório
do programa. O nome do arquivo é “teste.txt”.

FIGURA 5.2: ABERTURA DE ARQUIVO PARA


LEITURA.
Fonte: criação nossa

Fonte: criação nossa

O primeiro passo para manipulação de um arquivo é


Agora, vamos ver como abrir um arquivo que não consta
abri-lo, pois sem isso, não podemos ler, escrever, processar
no mesmo diretório onde o programa está salvo. Para isso,
ou fazer qualquer outra coisa. Existem várias formas de ler
é preciso informar o caminho completo de onde o arquivo
o conteúdo de um arquivo, a seguir vamos ver a função getc,
está/será gravado.
que lê um caracter por vez de um arquivo.
FIGURA 5.3: ABERTURA DE ARQUIVO PARA
LEITURA, EM UM DIRETÓRIO DIFERENTE.
3 - Função getc
A função getc() lê o caracter atual da stream e incrementa o
indicador de posição de arquivo, apontando para o próximo
caracter. O caractere é lido como um char e é convertido
em um inteiro. Quando chegar ao final do arquivo, a função
Fonte: criação nossa getc retornará EOF (End Of File ou, em português, Final de
Arquivo). Esses caracteres são lidos um a um e enviados para
Observe que usamos duas barras seguidas. Entre aspas, uma variável e essa variável pode ser manipulada da maneira
as duas barras juntas têm o mesmo efeito de apenas uma, que for necessária.
então, jamais use uma barra sozinha, sempre duas juntas,
quando surgir a necessidade de utilizá-las. Sintaxe:
variavel_do_tipo_char = getc(variavel_ponteiro);
REGRA
Entre aspas use \\ no lugar de \ variavel_do_tipo_char -> é uma variável do tipo
char e de tamanho 1 (quando não definimos o tamanho,
31
automaticamente, passa a ter tamanho 1). FIGURA 5.6: TELA DE SAÍDA DO PROGRAMA
getc -> é a função que vai ler um caracter do arquivo, REPRESENTADO PELA FIGURA 5.5.
e atribuir este caracter à variável que foi criada do tipo char.
variavel_ponteiro -> é a variável ponteiro que foi
definida sendo do tipo FILE.

Agora, podemos ver um exemplo de leitura de um


arquivo. Vamos ver como abrir um arquivo, ler o seu conteúdo
e enviar para a saída do programa.

FIGURA 5.5: LENDO O CONTEÚDO DE UM


ARQUIVO COM A FUNÇÃO GETC.

Fonte: criação nossa

Vimos como ler cada um dos caracteres do arquivo


individualmente, agora vamos aprender a ler uma cadeia de
caracteres de uma única vez.

4 - Função fgets
No caso anterior, vimos como ler os dados de um arquivo
caracter a caracter. Agora, veremos como ler vários caracteres
(uma string) de uma única vez utilizando a função fgets().

Esta função lê um número preestabelecido de caracteres


ou uma linha do arquivo. Se um caracter de nova linha for
Fonte: criação nossa encontrado e o número de carcateres preestabelecido for
maior do que o tamanho da linha, ele será descartado e a
A instrução: if (fp == NULL) verifica se o arquivo função irá retornar todos os caracteres anteriores ao de nova
existe, e caso exista, ela verifica se ele pode ser aberto no linha. Em outras palavras, a função fgets lê uma string até
modo indicado em fopen. encontrar um caracter de quebra de linha (em C, este caracter
é o “\n”) ou até chegar no tamanho preestabelecido.
Depois é criado um do while para que seja possível
percorrer todo o arquivo aberto. A condição de parada do do Como toda string o último caracter é o “\0”, portanto,
while é enquanto o final do arquivo não for alcançado (o final quando determinamos o tamanho da string a ser lida, temos
do arquivo é indicado por EOF - End Of File). E enquanto que calcular mais um caracter, porque o último será o “\0”
o final deste arquivo não for alcançado, a variável letra recebe (precisamos ter espaço para ele na string).
o caracter atual, e o valor dessa variável é impressa na tela em
seguida. Sintaxe:
fgets(variável_ char, tamanho, ponteiro_arquivo);
A instrução: letra = getc(fp); atribui o caracter atual do
arquivo à variável letra. Lembre-se de que a função getc lê o Onde:
caracter atual e incrementa o indicador de posição do arquivo variável_char -> é uma variável qualquer do tipo char.
para o próximo caracter. tamanho -> o número de caracteres que irá ser lido de
uma única vez, esse número não pode ser maior do que o
A imagem a seguir mostra a saída desse programa, e o tamanho da variável do tipo char, porque na verdade estamos
seguinte texto é exibido: atribuindo esses caracteres lidos a essa variável.
ponteiro_arquivo -> é a variável que foi definida
“Linguagem de Programacao II anteriormente como sendo um ponteiro do tipo FILE.
Lendo um arquivo com a funcao getc”
Vamos ver um exemplo de utilização da função fgets
Para verificar se o programa está realmente imprimindo para ler 50 caracteres do mesmo arquivo que foi utilizado no
corretamente o conteúdo do arquivo, abra o arquivo pelo exemplo com getc.
bloco de notas (ele vai estar no local indicado em fopen) e veja
se o programa está executando corretamente as instruções
que deveria.
Linguagem de Programação II 32
FIGURA 5.7: LENDO O CONTEÚDO DE UM
ARQUIVO COM A FUNÇÃO FGETS. 5 - Função putc
A função putc() escreve um caractere em uma stream na
posição atual e incrementa o indicador de posição de arquivo.
Essa função é usada para escrever caracteres (textos) em
arquivos. Esses caracteres podem ser informados pelo usuário
ou predefinidos pelo programa.
Sintaxe:
putc(variável_tipo_char, ponteiro);
Onde:
putc -> é a função que vai efetivamente escrever o
Fonte: criação nossa caracter no arquivo.
variável_tipo_char -> é a variável cujo conteúdo será
escrito no arquivo.
Na tela de saída do programa (que pode ser vista na figura ponteiro -> é a variável ponteiro para FILE.
a seguir), apenas a primeira frase do arquivo foi impressa. Isto
porque o caractere que indica o final da linha foi encontrado Vamos ver agora um programa que pede ao usuário
antes da leitura dos 50 caracteres que foi indicado na função que informe vários caracteres (o quanto ele desejar) até que
fgets. ele digite o caracter “.”, esses caracteres serão gravados no
arquivo imediatamente após o usuário informá-los.
FIGURA 5.8: TELA DE SAÍDA DO PROGRAMA FIGURA 5.9: ESCREVENDO NO ARQUIVO COM
REPRESENTADO PELA FIGURA 5.7. PUTC.

Fonte: criação nossa

Fonte: criação nossa

A saída desse programa pode ser vista na figura a


seguir, onde os seguintes valores foram informados: r, e, g
,i, a, n, e.
FIGURA 5.10: TELA DE SAÍDA DO PROGRAMA
REPRESENTADO PELA FIGURA 5.9.

Agora, vamos aprender a escrever no arquivo. Já vimos


como ler todo o arquivo e também como ler uma linha (ou
uma quantidade X de caracteres do arquivo).
A escrita em um arquivo segue mais ou menos a mesma
ideia da leitura. Primeiro, abrimos o arquivo usando o modo
adequado para a tarefa desejada e depois escrevemos nele.
Existem duas maneiras de escrever num arquivo: criando um
arquivo novo e adicionando conteúdo a ele ou abrindo um
arquivo já existente e adicionando conteúdo no final dele.

Fonte: criação nossa


33
Como exemplo, agora veremos como escrever um um arquivo. Nesta seção, veremos como escrever uma string
número predeterminado de caracteres em um arquivo. Neste inteira em um arquivo de uma única vez. A função fputs() nos
exemplo, o número de caracteres a serem escritos é dez. possibilita tal implementação. Nesse caso, o caracter “\0” não
será escrito no arquivo e não é necessário informar o tamanho
FIGURA 5.11: ESCREVENDO NO ARQUIVO COM da string que está sendo escrita.
PUTC - UM DETERMINADO NÚMERO DE CARACTERES.

Sintaxe:
fputs(variável_tipo_char, ponteiro);

Onde:
fputs -> função que efetivamente irá escrever a string
no arquivo
variável_tipo_char -> é uma variável qualquer do
tipo char (lembrando que deve ser um vetor de char), cujo
conteúdo será escrito no arquivo.
ponteiro -> é a variável que foi definida anteriormente
como sendo um ponteiro do tipo FILE.
Fonte: criação nossa

No exemplo a seguir, pedimos ao usuário que informe a


FIGURA 5.12: TELA DE SAÍDA DO PROGRAMA string que será escrita no arquivo “arquivo_fputs.txt”.
REPRESENTADO PELA FIGURA 5.11.
FIGURA 5.14: ESCREVENDO NO ARQUIVO COM

Fonte: criação nossa

Abrindo o arquivo “novo_arquivo.txt” pelo bloco de


notas, temos o seguinte conteúdo:

FIGURA 5.13: ARQUIVO “NOVO_ARQUIVO.TXT”


SENDO ABERTO PELO BLOCO DE NOTAS - NOTEPAD.
Fonte: criação nossa

A imagem a seguir mostra a tela de saída do programa


anterior, com a seguinte string de entrada: “Escrevendo no
arquivo com fputs”.

FIGURA 5.15: TELA DE SAÍDA DO PROGRAMA


REPRESENTADO PELA FIGURA 5.14.

Fonte: criação nossa

Agora, vamos ver como escrever uma string em um


arquivo de uma única vez. Para isso, usamos a função fputs.

6 - Função fputs
Até agora, vimos como escrever caracter por caracter em Fonte: criação nossa
Linguagem de Programação II 34
Se o arquivo for aberto pelo bloco de notas, será nova linha.
verificado que realmente a string consta nele. Veja a seguir.

FIGURA 5.16: ARQUIVO “ARQUIVO_FPUTS.TXT”


SENDO ABERTO PELO BLOCO DE NOTAS - NOTEPAD. Vale a pena

Vale a pena ler


Leia o capítulo 9 do livro C, Completo e Total

Fonte: criação nossa


Vale a pena acessar

• http://homepages.dcc.ufmg.br/~joaoreis/Site%20
Retomando a aula
de%20tutoriais/c_int/arquivos.htm

Autoavaliação
Vamos relembrar um pouco do que vimos nesta aula?
Veja se aprendeu nesta aula, respondendo o questionário autoavaliativo.
Depois confira o resultado das respostas, disponível na ferramenta
Arquivos da plataforma.
1 - Stream
Vimos que uma stream é utilizada para realizar operações
de leitura e escrita em arquivos através de uma associação que 1. Uma stream é criada para que seja possível manipular
é feita a ela quando o arquivo é aberto. um arquivo.
( ) Verdadeiro ( ) Falso
2 - Função fopen e fclose
Respectivamente função que abre e que fecha os arquivos. 2. A função getc tem um limite de caracteres a serem
A abertura do arquivo é fundamental para que seja possível lidos por vez. ( ) Verdadeiro ( ) Falso
manipulá-lo. O modo de abertura do arquivo está relacionado
com a finalidade dele no programa. Fechar o arquivo também 3. A função putc lê um caracter por vez do arquivo.
é muito importante, visto que pode evitar problemas de vários ( ) Verdadeiro ( ) Falso
tipos.
4. FILE é um tipo nativo da linguagem C. Utilizado em
3 - Função getc conjunto com ponteiro, permitirá a uma variável apontar para
Função utilizada para ler um caracter por vez do arquivo um arquivo.
aberto. Muito utilizada quando é preciso ler o arquivo todo. ( ) Verdadeiro ( ) Falso

4 - Função fgets 5. O nome do arquivo sempre estará entre aspas duplas.


Utilizada para ler uma string do arquivo, tem um número ( ) Verdadeiro ( ) Falso
limite de caracteres a ser lido, e este será respeitado, caso um
caracter de nova linha não seja encontrado antes. 6. O modo de abertura do arquivo “w” abre-o apenas
para leitura.
5 - Função putc ( ) Verdadeiro ( ) Falso
Escreve um caracter por vez em um arquivo aberto,
geralmente trabalha em conjunto com a função getc, enquanto 7. Podemos manipular mais de um arquivo ao mesmo
uma lê um caracter, a outra escreve um caracter. tempo em um mesmo programa.
( ) Verdadeiro ( ) Falso
6 - Função fputs
Utilizada para escrever uma string no arquivo, não tem 8. Os dados salvos em um arquivo manipulado em
um número específico de caracteres a serem escritos no um programa desenvolvido em C, serão apagados quando o
arquivo. Cada nova string escrita no arquivo ficará em uma
35
programa terminar.
( ) Verdadeiro ( ) Falso

9. A função fputs escreve uma string em um arquivo.


( ) Verdadeiro ( ) Falso

Minhas anotações

Você também pode gostar