OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação...
Transcript of OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação...
OPERAÇÕES COM ARQUIVOS EM C/COPERAÇÕES COM ARQUIVOS EM C/C++Rogério Rodrigues de Vargas
Roteiro da AulaS U
Mote o da u a MÁRIO
ObjetivosI N
TObjet os TRODUÇÃO
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 deproblemas através do desenvolvimento de programas de computador que manipulam arquivosarquivos
Arquivos na linguagem de programação CI N
Tqu os a guage de p og a ação C TRODUArmazenar dados em disco sistema de entrada/saída na linguagem de Ç
ÃO
programação C é único porque os dados podem ser transferidos na suarepresentação binária interna ou em um formato de texto legível por humanos. Issotorna fácil criar arquivos que satisfaçam qualquer necessidade
• Exemplo de um arquivo texto: ABC\nABC\n
ABCDEF\n
\n
ABCDEFGH\n
EOF
• Observações: EOF – End Of File (fim do arquivo)Observações: EOF End Of File (fim do arquivo).
• Nome do arquivo: 8 caracteres (nome) + 3 caracteres (extensão).
• Exemplos: turboc.txt, turboc.tex, turboc.doc
Principais FunçõesM Ac pa s u ções N
IPULLAÇÃO
DE
ARQUIV
OOS
Streams e ArquivosM ASt ea s e qu os N
IPULLAÇÃO
O sistema de E/S da linguagem de programaçãoC fornece uma interface consistente ao
DE
AR
programador que utiliza a linguagem deprogramação C, independentemente do Q
UIV
O
dispositivo real que é acessado
Este sistema (que é uma abstração) é chamado OS(q ç )
de stream e o dispositivo real é chamado dearquivoq
OBS: Na linguagem de programação C, todos os dispositivos são encaradoscomo arquivos
StreamsM ASt ea s N
IPULTodas as streams comportam‐se de forma LAÇÃO
Todas as streams comportam se de formasemelhante
Pelo fato das streams serem totalmente DE
AR
Pelo fato das streams serem totalmenteindependentes do dispositivo, a mesma função podeescrever em um arquivo em disco ou em algum Q
UIV
O
q goutro dispositivo, como o console
Na linguagem de programação C, um arquivo pode OSg g p g ç , q p
ser qualquer coisa, desde um arquivo em disco atéum terminal ou uma impressora
Uma vez o arquivo aberto, informações podem sertrocadas entre ele e o seu programa
Ponteiro de ArquivoM Ao te o de qu o N
IPULUm ponteiro de arquivo é um ponteiro para LAÇÃO
informações que definem várias coisas sobre oarquivo: nome, status e a posição atual do
DE
AR
arquivo
Um ponteiro de arquivo é uma variável ponteiro QUIV
O
do tipo FILE
Para ler ou escrever arquivos, seu programa OSPara ler ou escrever arquivos, seu programa
precisa usar ponteiros de arquivo. Para obteruma variável ponteiro de arquivo, use ouma variável ponteiro de arquivo, use ocomando:
FILE *fp;FILE fp;
Abertura de ArquivoM Abe tu a de qu o N
IPUL
A f ã f (fil ) it b i i
LAÇÃO
A função fopen (file open) permite abrir um arquivo ligando‐o a uma fila de bytes.
DE
AR
FILE fopen(const char* nomearq, const char* modo*);
QUIV
O
• Prototype: stdio.h
• nome arquivo: Deve ser uma string que
OS• nome_arquivo: Deve ser uma string que
contenha: "drive:\path\nome_do_arquivo“
d É t i té• modo: É uma string que contém as características desejadas
Modos de Operaçõesodos de Ope ações
Abrindo um ArquivoM Ab do u qu o N
IPULLAÇÃOConfirmar o sucesso de fopen( ) antes de tentar
qualquer outra operação sobre o arquivo DE
AR
qualquer outra operação sobre o arquivo
Se utilizar fopen( ) para abrir um arquivo comi ã it l i já Q
UIV
O
permissão para escrita, qualquer arquivo jáexistente com esse nome será apagado e um
i á i i i d
OSnovo arquivo será iniciado
Se nenhum arquivo com este nome existe, umserá criado
Abrindo um ArquivoM Ab do u qu o N
IPULLAÇÃOSe desejar adicionar algum conteúdo no final do
arquivo deve usar o modo "a" DE
AR
arquivo, deve usar o modo a
Arquivos já existentes só podem ser abertos paraõ d l it d " " Q
UIV
O
operações de leitura, modo "r"
Se um arquivo é aberto para operações de OSleitura/escrita, ele não será apagado caso já
exista e, senão existir, ele será criado (modo"r+")
Exemplo (abertura de arquivo)M Ae p o (abe tu a de a qu o) N
IPULLAÇÃO
DE
AR
Para abrir um arquivo chamado arquivo1,permitindo escrita, pode‐se utilizar: Q
UIV
O
pe do esc a, pode se u a
FILE *fp; OSFILE fp;
fp = fopen( “arquivo1”, “w”);
Exemplo (abertura de arquivo)M Ae p o (abe tu a de a qu o) N
IPULUma maneira mais “profissional” de escrever o LAÇÃO
trecho anterior é:
DE
AR
FILE *fp;if((fp = fopen( “arquivo1”, “w”)) == NULL ){ Q
UIV
O
printf(“nao foi possivel criar o arquivo\n”);exit(1);
}
OS}
Neste segundo caso qualquer erro na abertura doNeste segundo caso, qualquer erro na abertura doarquivo será detectado (o disco está cheio ouprotegido contra gravação)protegido contra gravação)
Abrindo um Arquivo com Nome FornecidoM Aq N
IPULLAÇÃOFILE *fp;
char nome arq[50]; DE
AR
_ q[ ];
printf(“entre com o nome do arquivo\n”);gets(nome arq); Q
UIV
O
gets(nome_arq);
if((fp = fopen( nome_arq, “r”)) == NULL ){
OS{
printf(“nao foi possivel abrir o arquivo %s\n”,nome_arq);exit(1);
}}
Abrindo um Arquivo com Nome FornecidoM Aq N
IPUL
#define MAX 120
*f
LAÇÃO
FILE *fp;char nome_arq[50], linha[120];
DE
AR
printf(“entre com o nome do arquivo\n”);gets(nome_arq);if((fp = fopen( nome_arq, “r”)) == NULL )
QUIV
O
{printf(“nao foi possivel abrir o arquivo %s\n”, nome_arq);exit(1); O
S}
while ( fgets(linha,MAX,fp) != NULL ){// aqui fica o processamento de cada linhaprintf(“%s”, linha );
}
Fechamento de ArquivosM Aec a e to de qu os N
IPULLAÇÃO
Um arquivo é desassociado de uma streamespecífica por meio de uma operação de D
EAR
p p p çfechamento
Se um arquivo aberto para saída for fechado, o QUIV
O
Se um arquivo aberto para saída for fechado, oconteúdo, da sua stream associada será escritono dispositivo externo. Este processo é O
Sno dispositivo externo. Este processo égeralmente referido como descarga (flushing) dastream e garante que nenhuma informação sejastream e garante que nenhuma informação sejaacidentalmente deixada no buffer do disco
Fechamento de ArquivosM Aec a e to de qu os N
IPULLAÇÃO
DE
AR
Todos os arquivos são fechadosautomaticamente quando o programa termina
QUIV
O
normalmente, com• main( ) retornando ao sistema operacional ou
h d it( )
OS• uma chamada a exit( )
f h d d b ( h)Os arquivos não são fechados quando um programa quebra (crash) ouquando ele chama abort( ).
Fechando um ArquivoM Aec a do u qu o N
IPULLAÇÃO
A função fclose( ) fecha uma stream que foi DE
AR
A função fclose( ) fecha uma stream que foiaberta por meio de uma chamada a fopen( )
l l d d d
QUIV
O
Ela escreve qualquer dado que ainda permaneceno buffer de disco no arquivo e, então, fecha
l í l d
OSnormalmente o arquivo em nível de sistema
operacional
Fechando um ArquivoM Aec a do u qu o N
IPULLAÇÃOUm fclose( ) também libera o bloco de controle D
EAR
( )de arquivo associado à stream, deixando‐odisponível para reutilização Q
UIV
O
Em muitos casos, há um limite do sistemaoperacional para o número de arquivos abertos O
Soperacional para o número de arquivos abertossimultaneamente, assim, deve‐se fechar umarquivo antes de abrir um outroarquivo antes de abrir um outro
Fechando um ArquivoM Aec a do u qu o N
IPULA função fclose( ) tem o seguinte protótipo: LAÇÃO
fclose(FILE *fp);
onde fp é o ponteiro de arquivo devolvido pela chamada a
DE
AR
fopen( ).
Um valor de retorno zero significa uma operação def h b d d
QUIV
O
fechamento bem sucedida
Qualquer outro valor indica um erro OSA função padrão ferror( ) pode ser utilizada para
determinar e informar qualquer problema
G l t f l ( ) f lh á d di ti idGeralmente, fclose( ) falhará quando um disco tiver sidoretirado prematuramente do acionador ou não houvermais espaço no discomais espaço no disco
Gravando um ArquivoM Aq N
IPUL
int main(int argc, char *argv[]) {
FILE *arquivo; LAÇÃO
char caracter; if(argc < 2) {
printf("\nErro: Digite o nome do arquivo !!!\n\n"); DE
AR
exit(1); } if((arquivo = fopen(argv[1],"w")) == NULL)
{ QUIV
O
printf("Erro ao abrir arquivo!!!\n\n"); exit(1);
} do
OS
{ caracter = getchar(); putc(caracter,arquivo);
}} while(caracter != '$'); fclose(arquivo); printf("\nGravado com sucesso em %s\n\n",argv[1]); return(0);return(0);
}
PosicionamentoM Aos c o a e to N
IPULPode‐se apontar para um byte específico dentro do arquivo LAÇÃO
movimentando o indicador de posição. Isto pode ser feito com o uso dafunção fseek( ), cuja sintaxe é:
fseek(ARQUIVO, NÚMERO DE BYTES, ORIGEM); DE
AR
fseek(ARQUIVO, NÚMERO_DE_BYTES, ORIGEM);
onde ARQUIVO é um ponteiro de arquivo aberto anteriormente,NÚMERO_DE_BYTES é a quantidade de bytes que o indicador de posição
á i d é i d d i d i di d
QUIV
O
será movimentado e ORIGEM é a partir de onde o movimento do indicadorde posição iniciará
OS
Para apontar para o início do arquivo use a função rewind( ), cujoprotótipo está no arquivo de cabeçalho stdio.h. Sua sintaxe é:
i d( Q O)rewind(ARQUIVO);
sendo ARQUIVO um ponteiro de arquivo.
Referências BibliográficasM Ae e ê c as b og á cas N
IPULAscêncio, Ana Fernanda Gomes e Campos, Edilene Aparecida LAÇÃO
Veneruchi de. Fundamentos de Programação deComputadores: Algoritmo, Pascal e C/C++. Inclui CD‐ROM com
í i l id Sã P l P i H ll 2002 DE
AR
exercícios resolvidos. São Paulo, Prentice‐Hall, 2002.
Forbellone, André Luiz Villar e Ebberspacher, HenryFrederico Lógica de Q
UIV
O
Frederico. Lógica de
Programação. São Paulo, Makrom Books, 1999.
S hildt H b t T b C G i d U á i Edit M G
OSSchildt, Herbert. Turbo C: Guia do Usuário, Editora: McGraw‐
Hill
Luzzardi Paulo Roberto Linguagem C Universidade CatólicaLuzzardi, Paulo Roberto. Linguagem C. Universidade Católicade Pelotas, 2006.