View
2
Download
0
Category
Preview:
Citation preview
CIn.ufpe.br
ComputaçãoEletrônicaAula12–ArquivosTextoeBinárioProf:LucianoBarbosa
CIn.ufpe.br
RelembrandoaArquiteturaBásicadeumComputador
Atéagora,todaainformaçãoarmazenadapornossosprogramasestavanamemóriaRAM,queérápida,porém,volátil.
Hojeaprenderemosarmazenarinformaçãonamemóriasecundária(disco),queélenta,porém,persistente.
CIn.ufpe.br
Arquivo• Definição:elementodeinformaçãoarmazenadonamemória
secundária(disco)docomputador• Características:
– Informaçõespersistemapósofechamentodosprogramaseatémesmoapósodesligamento(seguro)docomputador;
– Atribuem-senomesaoselementosdeinformação(arquivosediretórios),emvezdeendereçosdememória;
– Acessoàsinformaçõesémaislento.
CIn.ufpe.br
ModosdeAcessoaArquivos– ModoTexto:
• Caracteresquepodemserlidosporpessoas• Ex.:Códigofontedeumprograma(Cubo.c)• Outrosexemplos:.txt,.bat,.cpp,.h
– ModoBinário:• Valoresbinários• Nãopodemserlidosquandoabertasemeditoresdetextosimples.
• Ex.:Programaexecutável:(Cubo.exe)• Outrosexemplos:.docx,.pdf,.xlsx,.jpg,.gif,.mp3
Ex.:códigofonte(texto)
Ex.:programaexecutável(binário)
CIn.ufpe.br
ModoBinário
• Dadossãoarmazenadosdamesmaformaquesãoarmazenadosnamemóriaprincipal
• Vantagens:– Facilmenteinterpretadosporprogramas;– Compactação– Maiorvelocidadedemanipulação;
• Desvantagens:– Difícilleitura
CIn.ufpe.br
ModoTexto• Sequênciadecaracteresagrupadosemlinhas• Linhasseparadasporumcaracteredenovalinha(‘\n’,emC)• Vantagens:
– Podeserlidofacilmenteporumapessoa– Editadoporeditoresdetextoconvencionais
• Desvantagens– Codificaçãodoscaracterespodevariar(ASCII,UTF-8,ISO-8859,etc)– Arquivostendemasermaiores(todasosdadossãoconvertidospara
caracteres).• Ex:número2147483647
– Embinário:inteirode32bits– Emtexto:10caracteres(80bits).
• Pioraparareais:123456789,987654321podeserbemrepresentadoporumfloatde32bits.
CIn.ufpe.br
OperaçõesemArquivosemC• Abertura(open):
– SistemaOperacional(SO)encontraarquivopelonome– Preparabuffernamemóriaparaarmazenaroarquivo
• Leitura(read):– SOrecuperaotrechosolicitadodoarquivo– Partedoarquivoouoarquivotodopodevirdobuffer
• Escrita(write):– SOalteraconteúdodoarquivo– Aalteraçãoéfeitaprimeironobufferparadepoissertransferidaparao
disco– Pergunta:quando?Resposta:periodicamenteounofechamentodoarquivo
• Fechamento(close):– Ainformaçãodobufferéatualizadanodisco– Áreadobufferutilizadanamemóriaéliberada
CIn.ufpe.br
AberturadeArquivos• Afunçãodeaberturadearquivoséfopendastdio.h:
• Nome:Nomedoarquivo• FILE:PonteiroparaoarquivoabertoouNULL,sehouvererronaabertura• Modo:
o “t”(text):Indicamodotexto(podeseromitido);o “b”(binary):Indicamodobinário(obrigatórioseomodobinárioforopretendido);o “r”(read):Indicaleitura(oarquivodeveexistir);o “w”(write):Indicaescrita.Criaoarquivoseomesmonãoexistirouapagaoconteúdo
seexistir;o “a”(append):Indicaescritasemprenofinaldoarquivo.Criaoarquivoseomesmo
nãoexistir;o “r+”(read/update):Indicaaberturadeumarquivoexistenteparaatualizarseu
conteúdo;o “w+”(write/update):Criaumarquivovazioparaescritaeleitura.Apagaoarquivoseo
mesmojáexistir;o “a+”(append/update):Omesmoque“w+”,porémcomescritasapenasnofinaldo
arquivo.
CIn.ufpe.br
AberturadeArquivos
• Exemplo:
• Nome:“arqtext.txt”;• Tipodeabertura:
– “w”(write):Criaumarquivoparaescritaemmodotexto.Seoarquivoexistireleserádestruídoereinicializado.Senãoexistir,serácriadoumarquivovazio.
– Senãoforpossívelaabertura,afunçãofopenretornaráNULLemfptr.– OSOmantémum“cursor”queindicaaposiçãodetrabalhonoarquivo.
NomedoArquivo TipodeAbertura
CIn.ufpe.br
• Exemplo:
• Nome:“arqtext.txt”;• Tipodeabertura:
– “w+”(write/update):Criaumarquivoparaescritaeleituraemmodotexto.Seoarquivoexistireleserádestruídoereinicializado.Senãoexistir,serácriado.
– Senãoforpossívelaabertura,afunçãofopenretornaráNULLemfptr.– OSOmantémum“cursor”queindicaaposiçãodetrabalhonoarquivo.
AberturadeArquivos
CIn.ufpe.br
• Exemplo:
• Nome:“arqtext.txt”;• Tipodeabertura:
– “wb”(write/binary):Criaumarquivoparaescritaemmodobinário.Seoarquivoexistireleserádestruídoereinicializado.Senãoexistir,serácriado.
– Senãoforpossívelaabertura,afunçãofopenretornaráNULLemfptr.– OSOmantémum“cursor”queindicaaposiçãodetrabalhonoarquivo.
AberturadeArquivos
CIn.ufpe.br
• Apósleitura/escritadoarquivo,devemosfechá-lo• Garantequequalquerinformaçãonobuffernamemóriaseja
gravadanodisco• Afunçãodefechamentodearquivoséfclosedastdio.h:
• FILE*fp:ponteiroparaoarquivoaberto;• Retorno(int):0(zero)seoarquivoforfechadocomsucesso.• Exemplo:
FechamentodeArquivos
CIn.ufpe.br
• Acadaoperaçãodeleitura:– Dadoslidos– Cursoravançaeapontaparaopróximodado
• Funçãofscanfdabibliotecastdio.h– Similarascanf,comumparâmetroamaisqueéoponteiroparao
arquivodoqualosdadosserãolidos.– Lêdeumarquivopassadocomoparâmetroemvezdesomenteda
entradapadrão(teclado);– Podelertambémdaentradapadrão(arquivostdin)
Leitura(ModoTexto)
CIn.ufpe.br
• funçãofscanf:
• fp:éoponteiroparaoarquivo• formato:equivaleaoscódigosdeformatação(iguaisaodo
scanf)• endereco_variaveis:correspondeàlistadeendereçosde
variáveisquearmazenarãoosdadoslidosdoarquivo,assimcomonoscanf
• Retornanúmerodebyteslidoscomsucesso
Leitura(ModoTexto)
CIn.ufpe.br
• Acadaoperaçãodeleitura,osdadoscorrespondentessãoconvertidosdecaracteresparaotipo(formato)especificadoemfscanf;
• Arquivodevetersidopreviamentegravadoemmodotexto;
Leitura(ModoTexto)
Lêumastringdoarquivoapontadoporfpdeaté120caracteresearmazenaemprimeiraPalavra
CIn.ufpe.br
• Funçãofgetc:
– Lêumcaracteredeumarquivo– Retornaocódigodocaracterelido– RetornaaconstanteEOFseofimdoarquivoforalcançado
• Funçãofgets:
– Lêumasequênciadecaracteresatéque‘\n’sejaencontradoouquencaracterestenhamsidolidos
– séacadeiadecaracteresquearmazenaráoqueforlido– néonúmeromáximodecaracteresaseremlidos– fppodeserumponteiroparaoarquivodaentradapadrão(teclado)
stdin– Retornaponteiroparaacadeias
Leitura(ModoTexto)
CIn.ufpe.br
• Exemplo:– Programacontanúmerodecaracteresenúmerodelinhasdeumarquivo
Leitura(ModoTexto)
Lêcaractereeaindaverificasechegounofimdoarquivo
CIn.ufpe.br
• Exemplo:– Programainformaalinhadaprimeiraocorrênciadeumapalavranoarquivo
Leitura(ModoTexto)
Lêcaractereeaindaverificasechegounofimdoarquivo
strstrverificaseumastringésubstringdeoutra(string.h)
CIn.ufpe.br
• Operaçãodeescrita– Dadossãogravadosnamemória– Posteriormentenodisco– Cursoravançaparaapróximaposiçãodoarquivo
• Funçãofprintfdabibliotecastdio.h– Similaraprintf,comumparâmetroamaisqueéoponteiroparao
arquivo– Escreveemumarquivopassadocomoparâmetroemvezdesomentena
saídapadrão(monitor)– Podeescrevertambémnasaídapadrão(arquivostdout)
Escrita(ModoTexto)
CIn.ufpe.br
• Funçãofprintf:
– fp:éoponteiroparaoarquivo– formato:equivaleaoscódigosdeformatação(iguaisaodoprintf)– variáveis:correspondeàlistadevariáveis,cujosconteúdosserãoescritos
noarquivo– Retorna:númerodebytesescritoscomsucesso
• Acadaoperaçãodeescrita,osdadoscorrespondentessãoconvertidosdotipoespecificadoemformatoparacaracteres.
Escrita(ModoTexto)
CIn.ufpe.br
• Exemplo:– Programaescreveumapalavradenomáximo120caracteresemum
arquivotexto:
Escrita(ModoTexto)
CIn.ufpe.br
• Funçãofputc:
– Escreveumcaractereemumarquivo;– Retornaocódigodocaractereescrito.
• Funçãofputs:
– séacadeiadecaracteresqueseráescrita;– Retornaponteiroparaacadeias.
Escrita(ModoTexto)
CIn.ufpe.br
Escrita(ModoTexto)–Exemplo:Programaquelêumarquivoegeraoutrocomtodasasletrasconvertidasparamaiúsculas
Usuárioforneceonomedoarquivo
toupper:funçãodefinidaemctype.hqueconverteumcaractereparamaiúsculo.
CIn.ufpe.br
OutrasFunçõesÚteis(stdio.h)
• ftell:– Retornaaposiçãoatualdocursordoarquivo– Correspondeàdistânciaembytesemrelaçãoaocomeçodoarquivo
• fseek:– Utilizadaparaposicionamentodocursoremumarquivo;– dist-onúmerodebytesemrelaçãoàorigem;– origem-umaposiçãodocursordoarquivoembytes;– Constantes:SEEK_CUR:posiçãocorrente;SEEK_SET:iníciodoarquivo;
SEEK_END:finaldoarquivo;– Retornaanovaposiçãodocursor;
• rewind:– Utilizadaparaposicionamentodocursornoiníciodoarquivo.
CIn.ufpe.br
Escrita(ModoTexto)–Exemplo:Programaqueescreveumavariável(aluno1)dotipoAluno(struct)emumarquivotexto,retornaparaoiníciodoarquivo(rewind)elêainformaçãodoalunoemoutravariável(copia)
Deve-seleregravarcampoporcampo
CIn.ufpe.br
• Funçãofeofemstdio.hrealizaaverificaçãodefimdearquivo:
• Retorna1seofimdoarquivofoiatingidoou0casocontrário
VerificandooFinaldoArquivo
CIn.ufpe.br
• Exemplo:
VerificandooFinaldoArquivo
CIn.ufpe.br
• funçãofread:
• p-endereçodememóriaondeseráarmazenadooqueforlidodoarquivo;
• tam-tamanhoembytesdecadaelementolido;• nelem-númerodeelementosdetamanhotamlidos;• Retornaaquantidadedebyteslidoscomsucesso(tam*nelem);
Leitura(ModoBinário)
p->
tam=5bytes
nelem=3elementos
CIn.ufpe.br
Leitura(ModoBinário)
• Exemplo:Abreoarquivoemmodobinário
paraleitura
LêumaestruturaPontodoarquivo:tam:sizeof(Ponto)nelem:1
CIn.ufpe.br
• Emcadaoperaçãodeescrita,osdadossãogravadosnamemóriaeposteriormentenodisco,eocursoravançaparaapróximaposiçãodoarquivo;
• Afunçãofwritedabibliotecastdio.hpodeserutilizadaparaescritadeblocosdedadosemumarquivobinário.
Escrita(ModoBinário)
CIn.ufpe.br
• Funçãowrite:
– péoendereçodememóriacujoconteúdodeseja-sesalvaremarquivo;
– taméotamanhoembytesdecadaelementoescrito;– neleméonúmerodeelementosdetamanhotamescritos;– Retornaaquantidadedebytesescritoscomsucesso(tam*nelem)
Escrita(ModoBinário)
p->
tam=5bytes
nelem=3elementos
CIn.ufpe.br
• Exemplo:
Escrita(ModoBinário)
Abreoarquivoemmodobinárioparaescrita
GravaumaestruturaPontonoarquivo:tam:sizeof(Ponto)nelem:1
CIn.ufpe.br
fread/fwrite:
• Ler/escrevergrandesblocosdedadosemumarquivo;• Úteisparaler/escreverestruturasouvetoresemumarquivo
numaúnicachamadadefunção.
CIn.ufpe.br
Exemplo
CIn.ufpe.br
Exemplo
CIn.ufpe.br
Atividade• Façaumprograma“Agenda”paracadastraraté1000contatos.• Cadacontatodeveconter:Nome,telefone,e-maileprofissão;• Aoiniciaroprogramadeveserlidooarquivo“contatos.txt”contendo
oscontatospreviamentesalvosemumvetordeponteirosparaestruturas;
• Emumlaçooprogramadeveexibirummenucomquatroopções:1. Cadastrarcontato;2. Listarcontatoscadastrados;3. Removercontato;4. Salvar;5. Terminaroprograma;
• Quandoousuárioescolherumaopção,oprogramadeveexecutaraopçãoselecionadaeexibiromenunovamente,atéqueaopção5(Terminaroprograma)sejaselecionada.
CIn.ufpe.br
Atividade• Cadastrarcontato:
– Solicitaosdadosdocontatoeinsereemumaposiçãolivredovetor• Listarcontatos:
– Exibetodosdadosdetodososcontatoscadastrados,oíndicedasuaposiçãonovetor.
• Removecontato:– Solicitaoíndicedocontatoqueseráremovido– Removeocontatodovetor,liberandosuamemória– Marcaaposiçãodovetorcomolivre(NULL)
• Salvar:– Salvaosdadosdovetornoarquivotexto:contatos.txt
• Terminaoprograma:– Finalizaaexecuçãodoprograma.
Recommended