• Nenhum resultado encontrado

Rogério Rodrigues de Vargas

N/A
N/A
Protected

Academic year: 2021

Share "Rogério Rodrigues de Vargas"

Copied!
24
0
0

Texto

(1)

OPERAÇÕES COM ARQUIVOS EM C/C OPERAÇÕES COM ARQUIVOS EM C/C++

(2)

Roteiro da Aula

ote o da u a

S UMM

(3)

Objetivos

I NT

Objet os

T RODU ÇÃ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 de

problemas através do desenvolvimento de  programas de computador que manipulam  arquivos

(4)

Arquivos na linguagem de programação C

qu os a

guage

de p og a ação C

I NTT

RODU

Armazenar dados em disco sistema de entrada/saída na linguagem de ÇÃO

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 ABC\n ABCDEF\n \n ABCDEFGH\n EOF

Observações:Observações:  EOF  End Of File (fim do arquivo).EOF – End Of File (fim do arquivo)

Nome do arquivo: 8 caracteres (nome) + 3 caracteres (extensão).Exemplos: turboc.txt, turboc.tex, turboc.doc

(5)

Principais Funções

M   A

c pa s u ções

NI PU LL AÇÃO DE AR QUI V OO S

(6)

Streams e Arquivos

M   A

St ea s e

qu os

NI PU LL AÇÃO

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

C fornece uma interface consistente ao

DE

AR

programador que utiliza a linguagem de

programação C, independentemente do QUI

V

O

dispositivo real que é acessado

ƒ Este sistema (que é uma abstração) é chamado O

S

(q ç )

de stream e o dispositivo real é chamado de

arquivoq

OBS: Na linguagem de programação C, todos os dispositivos são encarados como arquivos

(7)

Streams

M   A

St ea s

NI PU L

ƒ Todas as streams comportam‐se de forma L

AÇÃO

Todas as streams comportam se de forma semelhante

ƒ Pelo fato das streams serem totalmente DE

AR

Pelo fato das streams serem totalmente independentes do dispositivo, a mesma função pode

escrever em um arquivo em disco ou em algum QUI

V

O

q g

outro dispositivo, como o console

ƒ Na linguagem de programação C, um arquivo pode O

S

g 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 ser trocadas entre ele e o seu programa

(8)

Ponteiro de Arquivo

M   A

o te o de

qu o

NI PU L

ƒ Um ponteiro de arquivo é um ponteiro para L

AÇÃO

informações que definem várias coisas sobre o arquivo: nome, status e a posição atual do

DE

AR

arquivo

ƒ Um ponteiro de arquivo é uma variável ponteiro QUI

V

O

do tipo FILE

ƒ Para ler ou escrever arquivos, seu programa O

S

Para ler ou escrever arquivos, seu programa precisa usar ponteiros de arquivo. Para obter uma variável ponteiro de arquivo, use o uma variável ponteiro de arquivo, use o comando:

FILE *fp; FILE fp;

(9)

Abertura de Arquivo

M   A

be tu a de

qu o

NI PU L 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*);

QUI

V

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 

(10)
(11)

Abrindo um Arquivo

M   A

b

do u

qu o

NI PU LL AÇÃO

ƒ Confirmar 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 com

i ã it l i já QUI

V

O

permissão para escrita, qualquer arquivo já existente com esse nome será apagado e um

i á i i i d OS

novo arquivo será iniciado

ƒ Se nenhum arquivo com este nome existe, um será criado

(12)

Abrindo um Arquivo

M   A

b

do u

qu o

NI PU LL AÇÃO

ƒ Se 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 " " QUI

V

O

operações de leitura, modo "r"

ƒ Se um arquivo é aberto para operações de O

S

leitura/escrita, ele não será apagado caso já exista e, senão existir, ele será criado (modo "r+")

(13)

Exemplo (abertura de arquivo)

M   A

e p o (abe tu a de a qu o)

NI PU LL AÇÃO DE AR

ƒ Para abrir um arquivo chamado arquivo1,

permitindo escrita, pode‐se utilizar: QUI

V O pe do esc a, pode se u a FILE *fp; OS FILE fp; fp = fopen( “arquivo1”, “w”);

(14)

Exemplo (abertura de arquivo)

M   A

e p o (abe tu a de a qu o)

NI PU L

ƒ Uma maneira mais “profissional” de escrever o L

AÇÃO

trecho anterior é:

DE

AR

FILE *fp;

if((fp = fopen( “arquivo1”, “w”)) == NULL )

{ QUI

V

O

printf(“nao foi possivel criar o arquivo\n”); exit(1);

} OS

}

Neste segundo caso qualquer erro na abertura do Neste segundo caso, qualquer erro na abertura do arquivo será detectado (o disco está cheio ou protegido contra gravação)

(15)

Abrindo um Arquivo com Nome Fornecido

M   A

q

NI PU LL AÇÃO FILE *fp;

char nome arq[50]; DE

AR

_ q[ ];

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

gets(nome arq); QUI

V

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

} }

(16)

Abrindo um Arquivo com Nome Fornecido

M   A

q

NI PU L #define MAX 120 *f L AÇÃ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 )

QUI

V

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 linha printf(“%s”, linha );

(17)

Fechamento de Arquivos

M   A

ec a e to de

qu os

NI PU LL AÇÃO

ƒ Um arquivo é desassociado de uma stream

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

AR

p p p ç

fechamento

ƒ Se um arquivo aberto para saída for fechado, o QUI

V

O

Se um arquivo aberto para saída for fechado, o conteúdo, da sua stream associada será escrito

no dispositivo externo. Este processo é OS no dispositivo externo. Este processo é

geralmente referido como descarga (flushing) da stream e garante que nenhuma informação seja stream e garante que nenhuma informação seja acidentalmente deixada no buffer do disco

(18)

Fechamento de Arquivos

M   A

ec a e to de

qu os

NI PU LL AÇÃO DE AR

ƒ Todos os arquivos são fechados automaticamente quando o programa termina

QUI

V

O

normalmente, com

main( ) retornando ao sistema operacional ou

h d it( )

O

S

uma chamada a exit( )

f h d d b ( h)

Os arquivos não são fechados quando um programa quebra (crash) ou quando ele chama abort( ).

(19)

Fechando um Arquivo

M   A

ec a do u

qu o

NI PU LL AÇÃO

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

AR

ƒ A função fclose( ) fecha uma stream que foi aberta por meio de uma chamada a fopen( )

l l d d d QUI

V

O

ƒ Ela escreve qualquer dado que ainda permanece no buffer de disco no arquivo e, então, fecha

l í l d

O

S

normalmente o arquivo em nível de sistema operacional

(20)

Fechando um Arquivo

M   A

ec a do u

qu o

NI PU LL AÇÃO

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

AR

( )

de arquivo associado à stream, deixando‐o

disponível para reutilização QUI

V

O

ƒ Em muitos casos, há um limite do sistema

operacional para o número de arquivos abertos OS operacional para o número de arquivos abertos

simultaneamente, assim, deve‐se fechar um arquivo antes de abrir um outro

(21)

Fechando um Arquivo

M   A

ec a do u

qu o

NI PU L

ƒ A função fclose( ) tem o seguinte protótipo: L

AÇÃ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 de

f h b d d QUI

V

O

fechamento bem sucedida

ƒ Qualquer outro valor indica um erro O

S

ƒ A função padrão ferror( ) pode ser utilizada para determinar e informar qualquer problema

G l t f l ( ) f lh á d di ti id

ƒ Geralmente, fclose( ) falhará quando um disco tiver sido retirado prematuramente do acionador ou não houver mais espaço no disco

(22)

Gravando um Arquivo

M   A

q

NI PU L

int main(int argc, char *argv[]) { FILE *arquivo; L AÇÃ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)

{ QUI

V

O

printf("Erro ao abrir arquivo!!!\n\n"); exit(1); } do O S { caracter = getchar(); putc(caracter,arquivo); } } while(caracter != '$'); fclose(arquivo);

printf("\nGravado com sucesso em %s\n\n",argv[1]); return(0);

return(0); }

(23)

Posicionamento

M   A

os c o a e to

NI PU L

ƒ Pode‐se apontar para um byte específico dentro do arquivo L

AÇÃO

movimentando o indicador de posição. Isto pode ser feito com o uso da funçã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 QUI

V

O

será movimentado e ORIGEM é a partir de onde o movimento do indicador de posição iniciará

O

S

ƒ 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 é:

i d( Q O)

rewind(ARQUIVO); sendo ARQUIVO um ponteiro de arquivo.

(24)

Referências Bibliográficas

M   A

e e ê c as

b og á cas

NI PU L

ƒ Ascêncio, Ana Fernanda Gomes e Campos, Edilene Aparecida L

AÇÃO

Veneruchi de. Fundamentos de Programação de

Computadores: 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, Henry

Frederico Lógica de QUI

V

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 OS

Schildt, Herbert. Turbo C: Guia do Usuário, Editora: McGraw‐ Hill

ƒ Luzzardi Paulo Roberto Linguagem C Universidade Católica ƒ Luzzardi, Paulo Roberto. Linguagem C. Universidade Católica de Pelotas, 2006.

Referências

Documentos relacionados

㻝㻜 㻾 ᡫࠝ 㻣㻛㻝㻝㻔᭶㻕 㻣㻛㻝㻢㻔ᅵ㻕 㻲㼡㼖㼕㼛㼗㼍 㻣㻛㻞㻠㻔᪥㻕 㻲㼡㼖㼕㼛㼗㼍 㻣㻛㻞㻤㻔ᮌ㻕 㻣㻛㻟㻜㻔ᅵ㻕. 㻝㻟 㻾 ᡫࠝ 㻥㻛㻝㻞㻔᭶㻕

para estes níveis esta associado a um Os registros fósseis encontrados até o fanglomerado, constituído em sua grande momento na bacia do Tacutu mostram uma

Amandine Tomazi Klein Ana Lídia Dickel Kilpp Ana Paula Rahmeier Anderson Brönstrup Anderson Dionatan Krahl André Schwarzbach Arno Henrique Markus Arthur Horst Hepp Arthur

Infantil Costurando Histórias Maternal Profª: Ana Margarethe Local: Biblioteca Turmas 02 e 04 Concerto Musical Com o grupo “ Ação Social pela Musica” Horário: 16

Essa chave de correção segue padrão semelhante àquele da chave para avaliação de escrita de palavra, no que concerne à descrição do padrão de escrita do aluno e para

Densidade de vapor Nenhuma informação disponível densidade relativa Nenhuma informação disponível Ponto de Fulgor.. Solubilidade em água Nenhuma informação disponível

Priorizando reunir microrregiões que concentram a maior parte da produção anual de milho do país, apresentam padrão semelhante em termos de safra agrícola em

STOT - exposição única Nenhuma informação disponível STOT - exposição repetida Nenhuma informação disponível. Perigo de aspiração Nenhuma