Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
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);
}
FILE *fp;
char nome_arq[50];
q[ ];
DE ARQUIVOS
printf(“entre com o nome do arquivo\n”);
gets(nome arq);
gets(nome_arq);
FILE *fp;
*f
char nome_arq[50], linha[120];
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);
}
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
DE ARQUIVOS
automaticamente quando o programa termina
normalmente, com
• main( ) retornando ao sistema operacional ou
• uma chamada
h d a exit(
it( )
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
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á
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.