SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
MC-102 — Aula 25
Arquivos em C
Instituto de Computa¸c˜ao – Unicamp
19 de Outubro de 2012
Roteiro
1 Introdu¸c˜ao a arquivos
2 Lendo e escrevendo em arquivos textos
3 Exemplos
4 Outras Informa¸c˜oes
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 2 / 27
Tipos de Mem´oria
Quando vimos a organiza¸c˜ao b´asica de um sistema computacional,
havia somente um tipo de mem´oria.
Mas na maioria dos sistemas, a mem´oria ´e dividida em dois tipos:
Saida
Controle Unidade
Logica e
Aritmetica
Memoria
Principal
(RAM)
Memoria
Secundaria
(HD)
Processador
Entrada
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 3 / 27
Tipos de Mem´oria
A mem´oria principal (Random Access Memory) utilizada na maioria
dos computadores, usa uma tecnologia que requer alimenta¸c˜ao
constante de energia para que informa¸c˜oes sejam preservadas.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 4 / 27
Tipos de Mem´oria
A mem´oria secundaria (como Hard Disks) utilizada na maioria dos
computadores, usa uma outra tecnologia que N˜AO requer alimenta¸c˜ao
constante de energia para que informa¸c˜oes sejam preservadas.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 5 / 27
Tipos de Mem´oria
Todos os programas executam na RAM, e por isso quando o programa
termina ou acaba energia, as informa¸c˜oes do programa s˜ao perdidas.
Para podermos gravar informa¸c˜oes de forma persistente, devemos
escrever estas informa¸c˜oes em arquivos na mem´oria secund´aria.
A mem´oria secund´aria possui algumas caracter´ısticas:
´E muito mais lenta que a RAM.
´E muito mais barata que a mem´oria RAM.
Possui maior capacidade de armazenamento.
Sempre que nos referirmos a um arquivo, estamos falando de
informa¸c˜oes armazenadas em mem´oria secund´aria.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 6 / 27
Tipos de Mem´oria
Todos os programas executam na RAM, e por isso quando o programa
termina ou acaba energia, as informa¸c˜oes do programa s˜ao perdidas.
Para podermos gravar informa¸c˜oes de forma persistente, devemos
escrever estas informa¸c˜oes em arquivos na mem´oria secund´aria.
A mem´oria secund´aria possui algumas caracter´ısticas:
´E muito mais lenta que a RAM.
´E muito mais barata que a mem´oria RAM.
Possui maior capacidade de armazenamento.
Sempre que nos referirmos a um arquivo, estamos falando de
informa¸c˜oes armazenadas em mem´oria secund´aria.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 6 / 27
Tipos de Mem´oria
Todos os programas executam na RAM, e por isso quando o programa
termina ou acaba energia, as informa¸c˜oes do programa s˜ao perdidas.
Para podermos gravar informa¸c˜oes de forma persistente, devemos
escrever estas informa¸c˜oes em arquivos na mem´oria secund´aria.
A mem´oria secund´aria possui algumas caracter´ısticas:
´E muito mais lenta que a RAM.
´E muito mais barata que a mem´oria RAM.
Possui maior capacidade de armazenamento.
Sempre que nos referirmos a um arquivo, estamos falando de
informa¸c˜oes armazenadas em mem´oria secund´aria.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 6 / 27
Tipos de Mem´oria
Todos os programas executam na RAM, e por isso quando o programa
termina ou acaba energia, as informa¸c˜oes do programa s˜ao perdidas.
Para podermos gravar informa¸c˜oes de forma persistente, devemos
escrever estas informa¸c˜oes em arquivos na mem´oria secund´aria.
A mem´oria secund´aria possui algumas caracter´ısticas:
´E muito mais lenta que a RAM.
´E muito mais barata que a mem´oria RAM.
Possui maior capacidade de armazenamento.
Sempre que nos referirmos a um arquivo, estamos falando de
informa¸c˜oes armazenadas em mem´oria secund´aria.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 6 / 27
Nomes e extens˜oes
Arquivos s˜ao identificados por um nome.
O nome de um arquivo pode conter uma extens˜ao que indica o
conte´udo do arquivo.
Algumas extens˜oes
arq.txt arquivo texto simples
arq.c c´odigo fonte em C
arq.pdf portable document format
arq.html arquivo para p´aginas WWW
(hypertext markup language)
arq∗ arquivo execut´avel (UNIX)
arq.exe arquivo execut´avel (Windows)
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 7 / 27
Tipos de arquivos
Arquivos podem ter o mais variado conte´udo, mas do ponto de vista dos
programas existem apenas dois tipos de arquivo:
Arquivo texto: Armazena caracteres que podem ser mostrados
diretamente na tela ou modificados por um editor de textos
simples. Exemplos: c´odigo fonte C, documento texto
simples, p´aginas HTML.
Arquivo bin´ario: Seq¨uˆencia de bits sujeita `as conven¸c˜oes dos programas
que o gerou, n˜ao leg´ıveis diretamente. Exemplos: arquivos
execut´aveis, arquivos compactados, documentos do Word.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 8 / 27
Diret´orio
Tamb´em chamado de pasta.
Cont´em arquivos e/ou outros diret´orios.
Uma hierarquia de diret´orios
/ diret´orio raiz
/ 
home bin subdiret´orios
/  / 
usr1 usr2 kate emacs
/ 
arq.txt mc102

lab.c
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 9 / 27
Caminhos absolutos ou relativos
O nome de um arquivo pode conter o seu diret´orio, ou seja, o caminho
para encontrar este arquivo a partir da raiz. Os caminhos podem ser
especificados de duas formas:
Caminho absoluto: descri¸c˜ao de um caminho desde o diret´orio raiz.
/bin/emacs
/home/usr1/arq.txt
Caminho relativo: descri¸c˜ao de um caminho a partir do diret´orio corrente.
arq.txt
mc102/lab.c
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 10 / 27
Arquivos texto em C
Em C, para se trabalhar com arquivos devemos criar um ponteiro
especial: um ponteiro para arquivos.
FILE *nome_variavel;
O comando acima cria um ponteiro para arquivos, cujo nome da
vari´avel ´e o nome especificado.
Ap´os ser criado um ponteiro para arquivo, podemos associ´a-lo com
um arquivo real do computador usando a fun¸c˜ao fopen.
FILE *arq1;
arq1 = fopen("teste.txt","r");
Neste exemplo a vari´avel ponteiro arq1 fica apontando para o arquivo
teste.txt.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 11 / 27
Arquivos texto em C
FILE *arq1;
arq1 = fopen("teste.txt","r");
O primeiro parˆametro para fopen ´e uma string com o nome do
arquivo
Pode ser absoluto, por exemplo: ”/user/eduardo/teste.txt”
Pode ser relativo como no exemplo acima: ”teste.txt”
O segundo parˆametro ´e uma string informando como o arquivo ser´a
aberto.
Se para leitura ou grava¸c˜ao de dados, ou ambos.
Se ´e texto ou se ´e bin´ario.
No nosso exemplo o r significa que abrimos um arquivo texto para
leitura.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 12 / 27
Abrindo um arquivo texto para leitura
Antes de acessar um arquivo, devemos abri-lo com a fun¸c˜ao fopen().
A fun¸c˜ao retorna um ponteiro para o arquivo em caso de sucesso, e
em caso de erro a fun¸c˜ao retorna NULL.
Abrindo o arquivo teste.txt
File *arq = fopen("teste.txt", "r");
if ( arq == NULL)
printf("Erro ao tentar abrir o arquivo teste.txt.");
else
printf("Arquivo aberto para leitura.n");
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 13 / 27
Lendo dados de um arquivo texto
Para ler dados do arquivo aberto, usamos a fun¸c˜ao fscanf(), que ´e
semelhante `a fun¸c˜ao scanf().
int fscanf(ponteiro para arquivo, string de formato, vari´aveis).
A ´unica diferen¸ca para o scanf, ´e que devemos passar como primeiro
parˆametro um ponteiro para o arquivo de onde ser´a feito a leitura.
Lendo dados do arquivo teste.txt
char aux;
FILE *f = fopen ("teste.txt", "r");
fscanf(f, "%c", &aux);
printf("%c", aux);
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 14 / 27
Lendo dados de um arquivo texto
Quando um arquivo ´e aberto, um indicador de posi¸c˜ao no arquivo ´e
criado, e este recebe a posi¸c˜ao do in´ıcio do arquivo.
Para cada dado lido do arquivo, este indicador de posi¸c˜ao ´e
automaticamente incrementado para o pr´oximo dado n˜ao lido.
Eventualmente o indicador de posi¸c˜ao chega ao fim do arquivo:
A fun¸c˜ao fscanf devolve um valor especial, EOF, caso tente-se ler
dados e o indicador de posi¸c˜ao est´a no fim do arquivo.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 15 / 27
Lendo dados de um arquivo texto
Para ler todos os dados de um arquivo texto, basta usarmos um la¸co
que ser´a executado enquanto n˜ao chegarmos no fim do arquivo:
Lendo dados do arquivo teste.txt
char aux;
FILE *f = fopen ("teste.txt", "r");
while (fscanf(f, "%c", &aux) != EOF)
printf("%c", aux);
fclose(f);
O comando fclose (no fim do c´odigo) deve sempre ser usado para
fechar um arquivo que foi aberto.
Quando escrevemos dados em um arquivo, este comando garante que
os dados ser˜ao efetivamente escritos no arquivo.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 16 / 27
#include <stdio.h>
int main() {
FILE *arq;
char aux, nomeArq[100];
printf("Entre com nome do arquivo:");
scanf("%s", nomeArq);
arq = (FILE *) fopen(nomeArq, "r");
if (arq == NULL)
printf("Erro ao abrir o arquivo: teste.txt");
else{
printf("------ Dados do arquivo:nn");
while(fscanf(arq,"%c",&aux) != EOF){
printf("%c",aux);
}
}
fclose(arq);
}
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 17 / 27
Lendo dados de um arquivo texto
Notem que ao realizar a leitura de um caractere, automaticamente o
indicador de posi¸c˜ao do arquivo se move para o pr´oximo caractere.
Ao chegar no fim do arquivo a fun¸c˜ao fscanf retorna o valor especial
EOF.
Note que para voltar ao in´ıcio do arquivo novamente vocˆe pode
fecha-lo e abri-lo mais uma vez, ou usar o comando rewind.
while(fscanf(arq,"%c",&aux) != EOF){
printf("%c",aux);
}
printf{"nn -----Imprimindo novamentenn");
rewind(arq);
while(fscanf(arq,"%c",&aux) != EOF){
printf("%c",aux);
}
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 18 / 27
Escrevendo dados em um arquivo texto
Para escrever em um arquivo, ele deve ser aberto de forma
apropriada, usando a op¸c˜ao w.
Usamos a fun¸c˜ao fprintf(), semelhante a fun¸c˜ao printf().
int fprintf( ponteiro para arquivo, texto, vari´aveis)
´E semelhante ao printf mas notem que precisamos passar o ponteiro
para o arquivo onde os dados ser˜ao escritos.
Copiando dois arquivos
FILE *fr = fopen ("teste.txt", "r");
FILE *fw = fopen ("saida.txt", "w");
while (fscanf(fr, "%c", &c) != EOF)
fprintf(fw,"%c", c);
fclose(fr);
fclose(fw);
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 19 / 27
Escrevendo dados em um arquivo texto
int main() {
FILE *arqIn, *arqOut;
char aux, nomeArqIn[100], nomeArqOut[100];
printf("Entre com nome do arquivo de entrada:");
scanf("%s", nomeArqIn);
arqIn = (FILE *) fopen(nomeArqIn, "r");
if (arqIn == NULL){
printf("Erro ao abrir o arquivo: %sn",nomeArqIn); return 0;
}
printf("Entre com nome do arquivo de saida:");
scanf("%s", nomeArqOut);
arqOut = (FILE *) fopen(nomeArqOut, "w");
if (arqOut == NULL){
printf("Erro ao abrir o arquivo: %sn",nomeArqOut); return 0;
}
while(fscanf(arqIn,"%c",&aux) != EOF){
fprintf(arqOut,"%c",aux);
}
fclose(arqIn);
fclose(arqOut);
}
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 20 / 27
fopen
Um pouco mais sobre a fun¸c˜ao fopen().
FILE* fopen(const char *caminho, char *modo);
Modos de abertura de arquivo texto
modo opera¸c˜oes indicador de posi¸c˜ao come¸ca
r leitura in´ıcio do arquivo
r+ leitura e escrita in´ıcio do arquivo
w escrita in´ıcio do arquivo
w+ escrita e leitura in´ıcio do arquivo
a (append) escrita final do arquivo
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 21 / 27
fopen
Se um arquivo for aberto para leitura (r) e ele n˜ao existir, fopen
devolve NULL.
Se um arquivo for aberto para escrita ou escrita/leitura (w ou w+) e
existir ele ´e sobrescrito;
Se o arquivo n˜ao existir um novo arquivo ´e criado.
No modo w vocˆe poder´a fazer apenas escritas e no modo w+ vocˆe
poder´a fazer tanto escritas quanto leituras.
Se um arquivo for aberto para leitura/escrita (r+) e existir ele N˜AO ´e
apagado;
Se o arquivo n˜ao existir, fopen devolve NULL.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 22 / 27
Lendo um texto na mem´oria
Podemos ler todo o texto de um arquivo para um vetor (deve ser
grande o suficiente!) e fazer qualquer altera¸c˜ao que julgarmos
necess´ario.
O texto alterado pode ent˜ao ser sobrescrito sobre o texto anterior.
Como exemplo vamos fazer um programa que troca toda ocorrˆencia
da letra ”a”por ”A”em um texto.
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 23 / 27
Lendo um texto na mem´oria
int main() {
FILE *arq;
char texto[1001], aux, nomeArqIn[100];
int i;
printf("Entre com nome do arquivo de entrada:");
scanf("%s", nomeArqIn);
arq = (FILE *) fopen(nomeArqIn, "r");
if (arq == NULL){
printf("Erro ao abrir o arquivo: %sn",nomeArqIn); return 0;
}
for(i=0; i<1000 && fscanf(arq,"%c",&aux) != EOF; i++){
texto[i] = aux;
}
texto[i] = ’0’;
fclose(arq); //fechar para reabri-lo e ent~ao sobreescrever
//abre arquivo para escrita e o altera
.....
}
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 24 / 27
Lendo um texto na mem´oria
int main() {
......
//abre arquivo para escrita e o altera
arq = (FILE *) fopen(nomeArqIn, "w");
if (arq == NULL){
printf("Erro ao abrir o arquivo: %sn",nomeArqIn);
return 0;
}
for(i=0; texto[i] != ’0’; i++){
if(texto[i] == ’a’)
fprintf(arq,"%c", ’A’);
else
fprintf(arq,"%c", texto[i]);
}
fclose(arq);
}
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 25 / 27
Resumo para se Trabalhar com Arquivos
Crie um ponteiro para arquivo: FILE *parq;
Abra o arquivo de modo apropriado associando-o a um ponteiro:
parq = fopen(nomeArquivo, modo); onde modo pode ser: r, r+,
w, w+
Leia dados do arquivo na mem´oria.
fscanf(parq, string-tipo-variavel, &variavel);
Dados podem ser lidos enquanto fscanf n˜ao devolver EOF.
Altere dados se necess´ario e escreva-os novamente em arquivo.
fprintf(parq, string-tipo-variavel, variavel);
Todo arquivo aberto deve ser fechado.
fclose(parq);
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 26 / 27
Outras Informa¸c˜oes
Vocˆe pode usar o fscanf como o scanf para ler dados em vari´aveis de
outro tipo que n˜ao texto ou char.
Pode-se ler uma linha ”1234”no arquivo texto para um int por exemplo:
int i;
fscanf(arq,"%d",&i);
O mesmo vale para o fprintf em rela¸c˜ao ao printf.
Neste exemplo ´e escrito o texto ”56”no arquivo.
int i=56;
fprintf(arq,"%d",i);
Vocˆe pode remover um arquivo usando a fun¸c˜ao
remove(string-nome-arq).
(Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 27 / 27

Weitere ähnliche Inhalte

Was ist angesagt?

Linux comandos para arquivos e diretórios
Linux   comandos para arquivos e diretóriosLinux   comandos para arquivos e diretórios
Linux comandos para arquivos e diretóriosDanilo Filitto
 
Comandos Linux
Comandos LinuxComandos Linux
Comandos Linuxlol
 
Linux comandos gerais e servidores de rede
Linux   comandos gerais e servidores de redeLinux   comandos gerais e servidores de rede
Linux comandos gerais e servidores de redefernandao777
 
Introdução aos comandos Linux
Introdução aos comandos LinuxIntrodução aos comandos Linux
Introdução aos comandos LinuxCarlos Quadros
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1Leo Amorim
 
Treinamento de comandos Unix e Linux
Treinamento de comandos Unix e LinuxTreinamento de comandos Unix e Linux
Treinamento de comandos Unix e LinuxCid de Andrade
 
Rpm e yum - gerenciamento de pacotes
Rpm e yum - gerenciamento de pacotesRpm e yum - gerenciamento de pacotes
Rpm e yum - gerenciamento de pacotesFábio dos Reis
 
Comandos do linux
Comandos do linuxComandos do linux
Comandos do linuxPeslPinguim
 
Sistemas operacionais de redes particionamento de discos ii
Sistemas operacionais de redes   particionamento de discos iiSistemas operacionais de redes   particionamento de discos ii
Sistemas operacionais de redes particionamento de discos iiCarlos Melo
 

Was ist angesagt? (20)

Linux comandos para arquivos e diretórios
Linux   comandos para arquivos e diretóriosLinux   comandos para arquivos e diretórios
Linux comandos para arquivos e diretórios
 
Comandos Linux
Comandos LinuxComandos Linux
Comandos Linux
 
Curso de Msdos vol4
Curso de Msdos vol4Curso de Msdos vol4
Curso de Msdos vol4
 
Comandos do linux
Comandos do linuxComandos do linux
Comandos do linux
 
Linux comandos gerais e servidores de rede
Linux   comandos gerais e servidores de redeLinux   comandos gerais e servidores de rede
Linux comandos gerais e servidores de rede
 
Introdução aos comandos Linux
Introdução aos comandos LinuxIntrodução aos comandos Linux
Introdução aos comandos Linux
 
Comandos linux
Comandos linuxComandos linux
Comandos linux
 
Unidade 3.6 Introdução ao Shell
Unidade 3.6 Introdução ao ShellUnidade 3.6 Introdução ao Shell
Unidade 3.6 Introdução ao Shell
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1
 
Dispositivos de Bloco
Dispositivos de BlocoDispositivos de Bloco
Dispositivos de Bloco
 
Aula 06 comandos linux
Aula 06   comandos linuxAula 06   comandos linux
Aula 06 comandos linux
 
Treinamento de comandos Unix e Linux
Treinamento de comandos Unix e LinuxTreinamento de comandos Unix e Linux
Treinamento de comandos Unix e Linux
 
Rpm e yum - gerenciamento de pacotes
Rpm e yum - gerenciamento de pacotesRpm e yum - gerenciamento de pacotes
Rpm e yum - gerenciamento de pacotes
 
Comandos do linux
Comandos do linuxComandos do linux
Comandos do linux
 
Linux shell
Linux shellLinux shell
Linux shell
 
Introdução Linux
Introdução LinuxIntrodução Linux
Introdução Linux
 
Apostila(1)
Apostila(1)Apostila(1)
Apostila(1)
 
Sistemas operacionais de redes particionamento de discos ii
Sistemas operacionais de redes   particionamento de discos iiSistemas operacionais de redes   particionamento de discos ii
Sistemas operacionais de redes particionamento de discos ii
 
Entendendo FHS - Palestra Debian Day 2013
Entendendo FHS - Palestra Debian Day 2013Entendendo FHS - Palestra Debian Day 2013
Entendendo FHS - Palestra Debian Day 2013
 
Comandos Linux Parte 2
Comandos Linux Parte 2Comandos Linux Parte 2
Comandos Linux Parte 2
 

Ähnlich wie Arquivos slides aula25

Laboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em discoLaboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em discoAlex Camargo
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Leo Amorim
 
Laboratório de Programação I: Arquivos (binários) em disco
Laboratório de Programação I: Arquivos (binários) em discoLaboratório de Programação I: Arquivos (binários) em disco
Laboratório de Programação I: Arquivos (binários) em discoAlex Camargo
 
Linux-formatado.pdf
Linux-formatado.pdfLinux-formatado.pdf
Linux-formatado.pdfssuserf964b1
 
Realizar o gerenciamento básico de arquivos 4Linux
Realizar o gerenciamento básico de arquivos 4LinuxRealizar o gerenciamento básico de arquivos 4Linux
Realizar o gerenciamento básico de arquivos 4LinuxSoftD Abreu
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas OperacionaisSergioSouza
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivosTiago
 
Introduction to linux
Introduction to linuxIntroduction to linux
Introduction to linuxguilhermeoki
 
Inter Aula1
Inter  Aula1Inter  Aula1
Inter Aula1willians
 

Ähnlich wie Arquivos slides aula25 (20)

Laboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em discoLaboratório de Programação I: Arquivos (texto) em disco
Laboratório de Programação I: Arquivos (texto) em disco
 
Linux Ubuntu
Linux   UbuntuLinux   Ubuntu
Linux Ubuntu
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1
 
Laboratório de Programação I: Arquivos (binários) em disco
Laboratório de Programação I: Arquivos (binários) em discoLaboratório de Programação I: Arquivos (binários) em disco
Laboratório de Programação I: Arquivos (binários) em disco
 
Aula 10 semana
Aula 10 semanaAula 10 semana
Aula 10 semana
 
Linux-formatado.pdf
Linux-formatado.pdfLinux-formatado.pdf
Linux-formatado.pdf
 
Arquivos em C
Arquivos em CArquivos em C
Arquivos em C
 
Realizar o gerenciamento básico de arquivos 4Linux
Realizar o gerenciamento básico de arquivos 4LinuxRealizar o gerenciamento básico de arquivos 4Linux
Realizar o gerenciamento básico de arquivos 4Linux
 
Msdos vol4
Msdos vol4Msdos vol4
Msdos vol4
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Introduction to linux
Introduction to linuxIntroduction to linux
Introduction to linux
 
Comando CMD
Comando CMDComando CMD
Comando CMD
 
ADS e GTI
ADS e GTIADS e GTI
ADS e GTI
 
Algoritmos - Aula 16 B - Arquivos
Algoritmos - Aula 16 B - ArquivosAlgoritmos - Aula 16 B - Arquivos
Algoritmos - Aula 16 B - Arquivos
 
Inter Aula1
Inter  Aula1Inter  Aula1
Inter Aula1
 
Comandos CMD
Comandos CMDComandos CMD
Comandos CMD
 
Curso de perl
Curso de perlCurso de perl
Curso de perl
 
Comandos linux
Comandos linuxComandos linux
Comandos linux
 

Arquivos slides aula25

  • 1. MC-102 — Aula 25 Arquivos em C Instituto de Computa¸c˜ao – Unicamp 19 de Outubro de 2012
  • 2. Roteiro 1 Introdu¸c˜ao a arquivos 2 Lendo e escrevendo em arquivos textos 3 Exemplos 4 Outras Informa¸c˜oes (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 2 / 27
  • 3. Tipos de Mem´oria Quando vimos a organiza¸c˜ao b´asica de um sistema computacional, havia somente um tipo de mem´oria. Mas na maioria dos sistemas, a mem´oria ´e dividida em dois tipos: Saida Controle Unidade Logica e Aritmetica Memoria Principal (RAM) Memoria Secundaria (HD) Processador Entrada (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 3 / 27
  • 4. Tipos de Mem´oria A mem´oria principal (Random Access Memory) utilizada na maioria dos computadores, usa uma tecnologia que requer alimenta¸c˜ao constante de energia para que informa¸c˜oes sejam preservadas. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 4 / 27
  • 5. Tipos de Mem´oria A mem´oria secundaria (como Hard Disks) utilizada na maioria dos computadores, usa uma outra tecnologia que N˜AO requer alimenta¸c˜ao constante de energia para que informa¸c˜oes sejam preservadas. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 5 / 27
  • 6. Tipos de Mem´oria Todos os programas executam na RAM, e por isso quando o programa termina ou acaba energia, as informa¸c˜oes do programa s˜ao perdidas. Para podermos gravar informa¸c˜oes de forma persistente, devemos escrever estas informa¸c˜oes em arquivos na mem´oria secund´aria. A mem´oria secund´aria possui algumas caracter´ısticas: ´E muito mais lenta que a RAM. ´E muito mais barata que a mem´oria RAM. Possui maior capacidade de armazenamento. Sempre que nos referirmos a um arquivo, estamos falando de informa¸c˜oes armazenadas em mem´oria secund´aria. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 6 / 27
  • 7. Tipos de Mem´oria Todos os programas executam na RAM, e por isso quando o programa termina ou acaba energia, as informa¸c˜oes do programa s˜ao perdidas. Para podermos gravar informa¸c˜oes de forma persistente, devemos escrever estas informa¸c˜oes em arquivos na mem´oria secund´aria. A mem´oria secund´aria possui algumas caracter´ısticas: ´E muito mais lenta que a RAM. ´E muito mais barata que a mem´oria RAM. Possui maior capacidade de armazenamento. Sempre que nos referirmos a um arquivo, estamos falando de informa¸c˜oes armazenadas em mem´oria secund´aria. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 6 / 27
  • 8. Tipos de Mem´oria Todos os programas executam na RAM, e por isso quando o programa termina ou acaba energia, as informa¸c˜oes do programa s˜ao perdidas. Para podermos gravar informa¸c˜oes de forma persistente, devemos escrever estas informa¸c˜oes em arquivos na mem´oria secund´aria. A mem´oria secund´aria possui algumas caracter´ısticas: ´E muito mais lenta que a RAM. ´E muito mais barata que a mem´oria RAM. Possui maior capacidade de armazenamento. Sempre que nos referirmos a um arquivo, estamos falando de informa¸c˜oes armazenadas em mem´oria secund´aria. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 6 / 27
  • 9. Tipos de Mem´oria Todos os programas executam na RAM, e por isso quando o programa termina ou acaba energia, as informa¸c˜oes do programa s˜ao perdidas. Para podermos gravar informa¸c˜oes de forma persistente, devemos escrever estas informa¸c˜oes em arquivos na mem´oria secund´aria. A mem´oria secund´aria possui algumas caracter´ısticas: ´E muito mais lenta que a RAM. ´E muito mais barata que a mem´oria RAM. Possui maior capacidade de armazenamento. Sempre que nos referirmos a um arquivo, estamos falando de informa¸c˜oes armazenadas em mem´oria secund´aria. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 6 / 27
  • 10. Nomes e extens˜oes Arquivos s˜ao identificados por um nome. O nome de um arquivo pode conter uma extens˜ao que indica o conte´udo do arquivo. Algumas extens˜oes arq.txt arquivo texto simples arq.c c´odigo fonte em C arq.pdf portable document format arq.html arquivo para p´aginas WWW (hypertext markup language) arq∗ arquivo execut´avel (UNIX) arq.exe arquivo execut´avel (Windows) (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 7 / 27
  • 11. Tipos de arquivos Arquivos podem ter o mais variado conte´udo, mas do ponto de vista dos programas existem apenas dois tipos de arquivo: Arquivo texto: Armazena caracteres que podem ser mostrados diretamente na tela ou modificados por um editor de textos simples. Exemplos: c´odigo fonte C, documento texto simples, p´aginas HTML. Arquivo bin´ario: Seq¨uˆencia de bits sujeita `as conven¸c˜oes dos programas que o gerou, n˜ao leg´ıveis diretamente. Exemplos: arquivos execut´aveis, arquivos compactados, documentos do Word. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 8 / 27
  • 12. Diret´orio Tamb´em chamado de pasta. Cont´em arquivos e/ou outros diret´orios. Uma hierarquia de diret´orios / diret´orio raiz / home bin subdiret´orios / / usr1 usr2 kate emacs / arq.txt mc102 lab.c (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 9 / 27
  • 13. Caminhos absolutos ou relativos O nome de um arquivo pode conter o seu diret´orio, ou seja, o caminho para encontrar este arquivo a partir da raiz. Os caminhos podem ser especificados de duas formas: Caminho absoluto: descri¸c˜ao de um caminho desde o diret´orio raiz. /bin/emacs /home/usr1/arq.txt Caminho relativo: descri¸c˜ao de um caminho a partir do diret´orio corrente. arq.txt mc102/lab.c (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 10 / 27
  • 14. Arquivos texto em C Em C, para se trabalhar com arquivos devemos criar um ponteiro especial: um ponteiro para arquivos. FILE *nome_variavel; O comando acima cria um ponteiro para arquivos, cujo nome da vari´avel ´e o nome especificado. Ap´os ser criado um ponteiro para arquivo, podemos associ´a-lo com um arquivo real do computador usando a fun¸c˜ao fopen. FILE *arq1; arq1 = fopen("teste.txt","r"); Neste exemplo a vari´avel ponteiro arq1 fica apontando para o arquivo teste.txt. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 11 / 27
  • 15. Arquivos texto em C FILE *arq1; arq1 = fopen("teste.txt","r"); O primeiro parˆametro para fopen ´e uma string com o nome do arquivo Pode ser absoluto, por exemplo: ”/user/eduardo/teste.txt” Pode ser relativo como no exemplo acima: ”teste.txt” O segundo parˆametro ´e uma string informando como o arquivo ser´a aberto. Se para leitura ou grava¸c˜ao de dados, ou ambos. Se ´e texto ou se ´e bin´ario. No nosso exemplo o r significa que abrimos um arquivo texto para leitura. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 12 / 27
  • 16. Abrindo um arquivo texto para leitura Antes de acessar um arquivo, devemos abri-lo com a fun¸c˜ao fopen(). A fun¸c˜ao retorna um ponteiro para o arquivo em caso de sucesso, e em caso de erro a fun¸c˜ao retorna NULL. Abrindo o arquivo teste.txt File *arq = fopen("teste.txt", "r"); if ( arq == NULL) printf("Erro ao tentar abrir o arquivo teste.txt."); else printf("Arquivo aberto para leitura.n"); (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 13 / 27
  • 17. Lendo dados de um arquivo texto Para ler dados do arquivo aberto, usamos a fun¸c˜ao fscanf(), que ´e semelhante `a fun¸c˜ao scanf(). int fscanf(ponteiro para arquivo, string de formato, vari´aveis). A ´unica diferen¸ca para o scanf, ´e que devemos passar como primeiro parˆametro um ponteiro para o arquivo de onde ser´a feito a leitura. Lendo dados do arquivo teste.txt char aux; FILE *f = fopen ("teste.txt", "r"); fscanf(f, "%c", &aux); printf("%c", aux); (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 14 / 27
  • 18. Lendo dados de um arquivo texto Quando um arquivo ´e aberto, um indicador de posi¸c˜ao no arquivo ´e criado, e este recebe a posi¸c˜ao do in´ıcio do arquivo. Para cada dado lido do arquivo, este indicador de posi¸c˜ao ´e automaticamente incrementado para o pr´oximo dado n˜ao lido. Eventualmente o indicador de posi¸c˜ao chega ao fim do arquivo: A fun¸c˜ao fscanf devolve um valor especial, EOF, caso tente-se ler dados e o indicador de posi¸c˜ao est´a no fim do arquivo. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 15 / 27
  • 19. Lendo dados de um arquivo texto Para ler todos os dados de um arquivo texto, basta usarmos um la¸co que ser´a executado enquanto n˜ao chegarmos no fim do arquivo: Lendo dados do arquivo teste.txt char aux; FILE *f = fopen ("teste.txt", "r"); while (fscanf(f, "%c", &aux) != EOF) printf("%c", aux); fclose(f); O comando fclose (no fim do c´odigo) deve sempre ser usado para fechar um arquivo que foi aberto. Quando escrevemos dados em um arquivo, este comando garante que os dados ser˜ao efetivamente escritos no arquivo. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 16 / 27
  • 20. #include <stdio.h> int main() { FILE *arq; char aux, nomeArq[100]; printf("Entre com nome do arquivo:"); scanf("%s", nomeArq); arq = (FILE *) fopen(nomeArq, "r"); if (arq == NULL) printf("Erro ao abrir o arquivo: teste.txt"); else{ printf("------ Dados do arquivo:nn"); while(fscanf(arq,"%c",&aux) != EOF){ printf("%c",aux); } } fclose(arq); } (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 17 / 27
  • 21. Lendo dados de um arquivo texto Notem que ao realizar a leitura de um caractere, automaticamente o indicador de posi¸c˜ao do arquivo se move para o pr´oximo caractere. Ao chegar no fim do arquivo a fun¸c˜ao fscanf retorna o valor especial EOF. Note que para voltar ao in´ıcio do arquivo novamente vocˆe pode fecha-lo e abri-lo mais uma vez, ou usar o comando rewind. while(fscanf(arq,"%c",&aux) != EOF){ printf("%c",aux); } printf{"nn -----Imprimindo novamentenn"); rewind(arq); while(fscanf(arq,"%c",&aux) != EOF){ printf("%c",aux); } (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 18 / 27
  • 22. Escrevendo dados em um arquivo texto Para escrever em um arquivo, ele deve ser aberto de forma apropriada, usando a op¸c˜ao w. Usamos a fun¸c˜ao fprintf(), semelhante a fun¸c˜ao printf(). int fprintf( ponteiro para arquivo, texto, vari´aveis) ´E semelhante ao printf mas notem que precisamos passar o ponteiro para o arquivo onde os dados ser˜ao escritos. Copiando dois arquivos FILE *fr = fopen ("teste.txt", "r"); FILE *fw = fopen ("saida.txt", "w"); while (fscanf(fr, "%c", &c) != EOF) fprintf(fw,"%c", c); fclose(fr); fclose(fw); (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 19 / 27
  • 23. Escrevendo dados em um arquivo texto int main() { FILE *arqIn, *arqOut; char aux, nomeArqIn[100], nomeArqOut[100]; printf("Entre com nome do arquivo de entrada:"); scanf("%s", nomeArqIn); arqIn = (FILE *) fopen(nomeArqIn, "r"); if (arqIn == NULL){ printf("Erro ao abrir o arquivo: %sn",nomeArqIn); return 0; } printf("Entre com nome do arquivo de saida:"); scanf("%s", nomeArqOut); arqOut = (FILE *) fopen(nomeArqOut, "w"); if (arqOut == NULL){ printf("Erro ao abrir o arquivo: %sn",nomeArqOut); return 0; } while(fscanf(arqIn,"%c",&aux) != EOF){ fprintf(arqOut,"%c",aux); } fclose(arqIn); fclose(arqOut); } (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 20 / 27
  • 24. fopen Um pouco mais sobre a fun¸c˜ao fopen(). FILE* fopen(const char *caminho, char *modo); Modos de abertura de arquivo texto modo opera¸c˜oes indicador de posi¸c˜ao come¸ca r leitura in´ıcio do arquivo r+ leitura e escrita in´ıcio do arquivo w escrita in´ıcio do arquivo w+ escrita e leitura in´ıcio do arquivo a (append) escrita final do arquivo (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 21 / 27
  • 25. fopen Se um arquivo for aberto para leitura (r) e ele n˜ao existir, fopen devolve NULL. Se um arquivo for aberto para escrita ou escrita/leitura (w ou w+) e existir ele ´e sobrescrito; Se o arquivo n˜ao existir um novo arquivo ´e criado. No modo w vocˆe poder´a fazer apenas escritas e no modo w+ vocˆe poder´a fazer tanto escritas quanto leituras. Se um arquivo for aberto para leitura/escrita (r+) e existir ele N˜AO ´e apagado; Se o arquivo n˜ao existir, fopen devolve NULL. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 22 / 27
  • 26. Lendo um texto na mem´oria Podemos ler todo o texto de um arquivo para um vetor (deve ser grande o suficiente!) e fazer qualquer altera¸c˜ao que julgarmos necess´ario. O texto alterado pode ent˜ao ser sobrescrito sobre o texto anterior. Como exemplo vamos fazer um programa que troca toda ocorrˆencia da letra ”a”por ”A”em um texto. (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 23 / 27
  • 27. Lendo um texto na mem´oria int main() { FILE *arq; char texto[1001], aux, nomeArqIn[100]; int i; printf("Entre com nome do arquivo de entrada:"); scanf("%s", nomeArqIn); arq = (FILE *) fopen(nomeArqIn, "r"); if (arq == NULL){ printf("Erro ao abrir o arquivo: %sn",nomeArqIn); return 0; } for(i=0; i<1000 && fscanf(arq,"%c",&aux) != EOF; i++){ texto[i] = aux; } texto[i] = ’0’; fclose(arq); //fechar para reabri-lo e ent~ao sobreescrever //abre arquivo para escrita e o altera ..... } (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 24 / 27
  • 28. Lendo um texto na mem´oria int main() { ...... //abre arquivo para escrita e o altera arq = (FILE *) fopen(nomeArqIn, "w"); if (arq == NULL){ printf("Erro ao abrir o arquivo: %sn",nomeArqIn); return 0; } for(i=0; texto[i] != ’0’; i++){ if(texto[i] == ’a’) fprintf(arq,"%c", ’A’); else fprintf(arq,"%c", texto[i]); } fclose(arq); } (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 25 / 27
  • 29. Resumo para se Trabalhar com Arquivos Crie um ponteiro para arquivo: FILE *parq; Abra o arquivo de modo apropriado associando-o a um ponteiro: parq = fopen(nomeArquivo, modo); onde modo pode ser: r, r+, w, w+ Leia dados do arquivo na mem´oria. fscanf(parq, string-tipo-variavel, &variavel); Dados podem ser lidos enquanto fscanf n˜ao devolver EOF. Altere dados se necess´ario e escreva-os novamente em arquivo. fprintf(parq, string-tipo-variavel, variavel); Todo arquivo aberto deve ser fechado. fclose(parq); (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 26 / 27
  • 30. Outras Informa¸c˜oes Vocˆe pode usar o fscanf como o scanf para ler dados em vari´aveis de outro tipo que n˜ao texto ou char. Pode-se ler uma linha ”1234”no arquivo texto para um int por exemplo: int i; fscanf(arq,"%d",&i); O mesmo vale para o fprintf em rela¸c˜ao ao printf. Neste exemplo ´e escrito o texto ”56”no arquivo. int i=56; fprintf(arq,"%d",i); Vocˆe pode remover um arquivo usando a fun¸c˜ao remove(string-nome-arq). (Instituto de Computa¸c˜ao – Unicamp) MC-102 — Arquivos em C 19 de Outubro de 2012 27 / 27