24
OPERAÇÕES COM ARQUIVOS EM C/C OPERAÇÕES COM ARQUIVOS EM C/C ++ Rogério Rodrigues de Vargas

OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

OPERAÇÕES COM ARQUIVOS EM C/COPERAÇÕES COM ARQUIVOS EM C/C++Rogério Rodrigues de Vargas

Page 2: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

Roteiro da AulaS U

Mote o da u a MÁRIO

Page 3: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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

Page 4: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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

Page 5: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

Principais FunçõesM Ac pa s u ções N

IPULLAÇÃO

DE

ARQUIV

OOS

Page 6: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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

Page 7: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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

Page 8: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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;

Page 9: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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

Page 10: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

Modos de Operaçõesodos de Ope ações

Page 11: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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

Page 12: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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+")

Page 13: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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”);

Page 14: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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)

Page 15: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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);

}}

Page 16: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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 );

}

Page 17: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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

Page 18: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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( ).

Page 19: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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

Page 20: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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

Page 21: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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

Page 22: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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);

}

Page 23: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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.

Page 24: OPERAÇÕES COM ARQUIVOS EM C/C++rogerio/material_auxiliar/...Arquivos na linguagem de programação C I N qu os p og a ação T T RODU Armazenar dados em disco sistema de entrada/saída

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.