Você está na página 1de 24

OPERAÇÕES COM ARQUIVOS EM C/C

OPERAÇÕES COM ARQUIVOS EM C/C++
Rogério Rodrigues de Vargas
S U M Á R I O
Roteiro da Aula
ote o da u a
I N T R O D U Ç Ã O
Objet os
Objetivos

ƒ Conhecer os aspectos básicos de operações com 
arquivos

ƒ Dominar o processo de descrição e solução de 
problemas através do desenvolvimento de
problemas através do desenvolvimento de 
programas de computador que manipulam 
arquivos
I N T R O D U Ç Ã O
Arquivos na linguagem de programação C
qu os a guage de p og a ação C
Armazenar dados em disco sistema de entrada/saída na linguagem de
programação C é único porque os dados podem ser transferidos na sua
representação binária interna ou em um formato de texto legível por humanos. Isso
torna fácil criar arquivos que satisfaçam qualquer necessidade

• Exemplo de um arquivo texto: 
ABC\n
ABCDEF\n
\n
ABCDEFGH\n
EOF
• Observações: 
Observações: EOF 
EOF – End Of File (fim do arquivo).
End Of File (fim do arquivo)
• Nome do arquivo: 8 caracteres (nome) + 3 caracteres (extensão).
• Exemplos: turboc.txt, turboc.tex, turboc.doc
M A N I P U L A Ç Ã O DE ARQUIVOS
c pa s u ções
Principais Funções
M A N I P U L A Ç Ã O
St ea s e qu os
Streams e Arquivos

ƒ O sistema de E/S da linguagem de programação


C fornece uma interface consistente ao
programador que utiliza a linguagem de

DE ARQUIVOS
programação C, independentemente do
dispositivo real que é acessado
ƒ Este sistema (q
(que é uma abstração)
ç ) é chamado
de stream e o dispositivo real é chamado de
arquivo
q
OBS: Na linguagem de programação C, todos os dispositivos são encarados
como arquivos
M A N I P U L A Ç Ã O
St ea s
Streams
ƒ Todas as streams comportam
comportam‐se
se de forma
semelhante
ƒ Pelo fato das streams serem totalmente

DE ARQUIVOS
independentes do dispositivo, a mesma função pode
escrever em um arquivo
q em disco ou em algum
g
outro dispositivo, como o console
ƒ Na linguagem
g g de p
programação
g ç C,, um arquivo
q pode
p
ser qualquer coisa, desde um arquivo em disco até
um terminal ou uma impressora
ƒ Uma vez o arquivo aberto, informações podem ser
trocadas entre ele e o seu programa
M A N I P U L A Ç Ã O
Ponteiro de Arquivo
o te o de qu o
ƒ Um ponteiro de arquivo é um ponteiro para
informações que definem várias coisas sobre o
arquivo: nome, status e a posição atual do
arquivo

DE ARQUIVOS
ƒ Um ponteiro de arquivo é uma variável ponteiro
do tipo FILE
ƒ Para ler ou escrever arquivos, seu programa
precisa usar ponteiros de arquivo. Para obter
uma variável ponteiro de arquivo, use o
comando:
FILE *fp;fp;
M A N I P U L A Ç Ã O
Abertura de Arquivo
be tu a de qu o

A função fopen
A f ã f (fil
(file open) permite abrir um arquivo 
) it b i i
ligando‐o a uma fila de bytes.

DE ARQUIVOS
FILE fopen(const char* nomearq, const char* modo*);

• Prototype: stdio.h
• nome_arquivo: Deve ser uma string que 
nome arquivo: Deve ser uma string que
contenha: "drive:\path\nome_do_arquivo“
• modo: É uma string que contém as 
d É ti té
características desejadas
Modos de Operações
odos de Ope ações
M A N I P U L A Ç Ã O
Abrindo um Arquivo
b do u qu o

ƒ Confirmar o sucesso de fopen( ) antes de tentar


qualquer outra operação sobre o arquivo

DE ARQUIVOS
ƒ Se utilizar fopen( ) para abrir um arquivo com
permissão
i ã para escrita, it qualquer
l arquivo
i já
existente com esse nome será apagado e um
novo arquivo
i seráá iniciado
i i i d
ƒ Se nenhum arquivo com este nome existe, um
será criado
M A N I P U L A Ç Ã O
Abrindo um Arquivo
b do u qu o

ƒ Se desejar adicionar algum conteúdo no final do


arquivo deve usar o modo "a"
arquivo, a

DE ARQUIVOS
ƒ Arquivos já existentes só podem ser abertos para
operações
õ ded leitura,
l it modo
d "r"
""
ƒ Se um arquivo é aberto para operações de
leitura/escrita, ele não será apagado caso já
exista e, senão existir, ele será criado (modo
"r+")
M A N I P U L A Ç Ã O
Exemplo (abertura de arquivo)
e p o (abe tu a de a qu o)

DE ARQUIVOS
ƒ Para abrir um arquivo chamado arquivo1,
permitindo
pe do esc
escrita,
a, pode
pode‐se
se u
utilizar:
a

FILE *fp;
fp;
fp = fopen( “arquivo1”, “w”);
M A N I P U L A Ç Ã O
Exemplo (abertura de arquivo)
e p o (abe tu a de a qu o)
ƒ Uma maneira mais “profissional” de escrever o
trecho anterior é:
FILE *fp;

DE ARQUIVOS
if((fp = fopen( “arquivo1”, “w”)) == NULL )
{
printf(“nao foi possivel criar o arquivo\n”);
exit(1);
}

Neste segundo caso,


caso qualquer erro na abertura do
arquivo será detectado (o disco está cheio ou
protegido contra gravação)
M A N I P U L A Ç Ã O
Abrindo um Arquivo com Nome Fornecido
q

FILE *fp;
char nome_arq[50];
q[ ];

DE ARQUIVOS
printf(“entre com o nome do arquivo\n”);
gets(nome arq);
gets(nome_arq);

if((fp = fopen( nome_arq, “r”)) == NULL )


{
printf(“nao foi possivel abrir o arquivo %s\n”,nome_arq);
exit(1);
}
M A N I P U L A Ç Ã O
Abrindo um Arquivo com Nome Fornecido
q
#define MAX 120

FILE *fp;
*f
char nome_arq[50], linha[120];

printf(“entre com o nome do arquivo\n”);

DE ARQUIVOS
gets(nome_arq);
if((fp = fopen( nome_arq, “r”)) == NULL )
{
printf(“nao foi possivel abrir o arquivo %s\n”, nome_arq);
exit(1);
}

while ( fgets(linha,MAX,fp) != NULL )


{
// aqui fica o processamento de cada linha
printf(“%s”, linha );
}
M A N I P U L A Ç Ã O
Fechamento de Arquivos
ec a e to de qu os

ƒ Um arquivo é desassociado de uma stream


específica
p por meio de uma operação
p p ç de

DE ARQUIVOS
fechamento
ƒ Se um arquivo aberto para saída for fechado, o
conteúdo, da sua stream associada será escrito
no dispositivo externo. Este processo é
geralmente referido como descarga (flushing) da
stream e garante que nenhuma informação seja
acidentalmente deixada no buffer do disco
M A N I P U L A Ç Ã O
Fechamento de Arquivos
ec a e to de qu os

ƒ Todos os arquivos são fechados

DE ARQUIVOS
automaticamente quando o programa termina
normalmente, com
• main( ) retornando ao sistema operacional ou
• uma chamada
h d a exit(
it( )

Os arquivos não são fechados


f h d quando
d um programa quebra
b (crash)
( h) ou
quando ele chama abort( ).
M A N I P U L A Ç Ã O
Fechando um Arquivo
ec a do u qu o

ƒ A função fclose( ) fecha uma stream que foi

DE ARQUIVOS
aberta por meio de uma chamada a fopen( )
ƒ Ela
l escreve qualquer
l d d que ainda
dado d permanece
no buffer de disco no arquivo e, então, fecha
normalmente
l o arquivo em nível
í l de
d sistema
operacional
M A N I P U L A Ç Ã O
Fechando um Arquivo
ec a do u qu o

ƒ Um fclose(( ) também libera o bloco de controle

DE ARQUIVOS
de arquivo associado à stream, deixando‐o
disponível para reutilização
ƒ Em muitos casos, há um limite do sistema
operacional para o número de arquivos abertos
simultaneamente, assim, deve‐se fechar um
arquivo antes de abrir um outro
M A N I P U L A Ç Ã O
Fechando um Arquivo
ec a do u qu o
ƒ A função fclose( ) tem o seguinte protótipo:
fclose(FILE *fp);
onde fp é o ponteiro de arquivo devolvido pela chamada a
fopen( ).

DE ARQUIVOS
ƒ Um valor de retorno zero significa uma operação de
f h
fechamento b
bem sucedida
dd
ƒ Qualquer outro valor indica um erro
ƒ A função padrão ferror( ) pode ser utilizada para
determinar e informar qualquer problema
ƒ Geralmente,
G l t fclose(
f l ( ) falhará
f lh á quandod um disco
di ti
tiver sido
id
retirado prematuramente do acionador ou não houver
mais espaço no disco
M A N I P U L A Ç Ã O
Gravando um Arquivo
q
int main(int argc, char *argv[])
{
FILE *arquivo;
char caracter;
if(argc < 2)
{
printf("\nErro: Digite o nome do arquivo !!!\n\n");

DE ARQUIVOS
exit(1);
}
if((arquivo = fopen(argv[1],"w")) == NULL)
{
printf("Erro ao abrir arquivo!!!\n\n");
exit(1);
}
do
{
caracter = getchar();
putc(caracter,arquivo);
}
while(caracter != '$');
fclose(arquivo);
printf("\nGravado com sucesso em %s\n\n",argv[1]);
return(0);
}
M A N I P U L A Ç Ã O
Posicionamento
os c o a e to
ƒ Pode‐se apontar para um byte específico dentro do arquivo
movimentando o indicador de posição. Isto pode ser feito com o uso da
função fseek( ), cuja sintaxe é:
fseek(ARQUIVO, NÚMERO NÚMERO_DE_BYTES,
DE BYTES, ORIGEM);

DE ARQUIVOS
onde ARQUIVO é um ponteiro de arquivo aberto anteriormente,
NÚMERO_DE_BYTES é a quantidade de bytes que o indicador de posição
seráá movimentado
i d e ORIGEM é a partiri de
d onde
d o movimento
i d indicador
do i di d
de posição iniciará

ƒ Para apontar para o início do arquivo use a função rewind( ), cujo


protótipo está no arquivo de cabeçalho stdio.h. Sua sintaxe é:
rewind(ARQUIVO);
i d( Q O)
sendo ARQUIVO um ponteiro de arquivo.
M A N I P U L A Ç Ã O
Referências Bibliográficas
e e ê c as b og á cas
ƒ Ascêncio, Ana Fernanda Gomes e Campos, Edilene Aparecida
Veneruchi de. Fundamentos de Programação de
Computadores: Algoritmo, Pascal e C/C++. Inclui CD‐ROM com
exercícios
í i resolvidos.
l id São
Sã Paulo,
P l Prentice‐Hall,
P i H ll 2002.
2002

DE ARQUIVOS
ƒ Forbellone, André Luiz Villar e Ebberspacher, Henry
Frederico Lógica de
Frederico.
ƒ Programação. São Paulo, Makrom Books, 1999.
S hildt Herbert.
Schildt, H b t Turbo
T b C:C Guia
G i do
d Usuário,
U á i Editora:
Edit M G
McGraw‐
Hill
ƒ Luzzardi,
Luzzardi Paulo Roberto.
Roberto Linguagem C.
C Universidade Católica
de Pelotas, 2006.

Você também pode gostar