DE DADOS I
Leia Nota
Nota<6
sim
Reprovado
no
Nota<7
sim
Recuperao
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello Word!");
system("pause");
return 0;
}
no
Aprovado
Arquivos
SISTEMAS DE INFORMAO - 1o PERODO
UNIMONTES / 2015
Arquivos
Introduo
Armazenar dados em estruturas de dados, tais
como vetores, matrizes ou registros, muito til para
manipular informaes do mundo real.
Entretanto, tais estruturas so sempre manipuladas na
memria principal (RAM), que voltil.
Isto significa que, aps o encerramento do
programa, os dados so perdidos.
Para manter os dados armazenados de forma
persistente necessrio utilizar um meio de
armazenamento no voltil, tais como os discos
magnticos, discos ticos ou outro tipo de memria
no voltil (exemplo: memrias FLASH RAM).
Arquivos
Discos
Atuador
Cabeas de
leitura/gravao
Arquivos
CIs de
memria flash
Arquivos
Introduo
Dados so armazenados em disco na forma de
arquivos.
Arquivos tem um nome no sistema operacional e so
agrupados em diretrios ou pastas. A estrutura de
diretrios hierrquica e forma uma rvore.
Arquivos podem ser acessados por meio do caminho,
a partir do diretrio raiz, at o diretrio onde o
arquivo se encontra.
Cada diretrio separado por uma barra (/ nos
sistemas operacionais Unix e Linux, \ nos sistemas
operacionais padro Microsoft). Exemplo:
C:\Disciplinas 2011\AEDI\Alunos\Notas
Arquivos
Diretrio raiz
\
Disciplinas 2010
AEDI
Arquivos
Disciplinas 2011
AEDII
AEDI
AEDII
Arquivos
Introduo
Pode-se manipular os dados armazenados em
arquivos por meio do prprio sistema operacional,
que possui rotinas para criar, abrir, ler, gravar e
fechar arquivos.
As linguagens de programao so capazes de
fazer chamadas ao sistema operacional e, assim,
utilizar arquivos.
Portanto, os arquivos manipulados dentro de um
programa podem ser acessados por via sistema
operacional.
A manipulao de arquivos nos programas feita por
meio de algumas funes bsicas.
Arquivos
Introduo
Quando um programa executado, este tem acesso
ao diretrio corrente (diretrio onde programa esta
armazenado).
Neste caso, o programa no precisa indicar o caminho
para acessar arquivos do mesmo diretrio.
Caso os arquivos estejam em outro diretrio, o
programa poder utilizar dois tipos de caminhos:
Arquivos
Sistema de E/S em C
A linguagem C no possui nenhum comando de E/S.
Ao contrrio, todas operaes de E/S ocorrem
mediante chamadas a funes da biblioteca
padro.
C possui um sistema de E/S que fornece uma
interface consistente ao programador,
independentemente do dispositivo real acessado.
Isto significa que o sistema de E/S de C prov um
nvel de abstrao entre o programador e o
dispositivo utilizado.
Esta abstrao chamada de stream e o
dispositivo real chamado de arquivo.
Arquivos
Streams
10
Arquivos
Streams
Stream de texto uma sequncia de caracteres.
11
Arquivos
Streams
Stream binria uma sequncia de bytes com
12
Arquivos
Arquivos em C
Em C, um arquivo pode ser qualquer coisa, desde
um arquivo em disco at um terminal ou
impressora.
A associao entre uma stream como o arquivo
especifico realizada numa operao de abertura.
Uma vez que o arquivo esteja aberto, as informaes
podem ser trocadas entre ele e o programa.
Nem todos arquivos apresentam os mesmos recursos,
por exemplo: disco e teclado (em C, todas as
streams so iguais, mas no todos os arquivos).
Um arquivo que suporta acesso aleatrio possui um
indicador de posio no arquivo.
13
Arquivos
Arquivos em C
Um arquivo desassociado de uma stream especfica
por meio de uma operao de fechamento.
No fechamento do arquivo, se houver algum
contedo, os dados sero escritos no dispositivo
externo (processo denominado flushing).
Todos os arquivos so fechados quando o programa
termina normalmente. Se houver uma terminao
inesperada do programa (crash) ou uma chamada a
funo abort(), os arquivos no sero fechados.
Cada stream associada a um arquivo tem uma
estrutura de controle de arquivo tipo FILE (definida
em STDIO.H).
14
Arquivos
Arquivos
fopen()
fclose()
fputc()
fgetc()
fputs ()
fgets()
fseek()
Funo
Abre um arquivo.
Fecha um arquivo.
Escreve um caractere em um arquivo.
L um caractere de um arquivo.
Escreve uma string em um arquivo.
L uma string de um arquivo.
Posiciona o arquivo em um byte especfico.
fprintf()
fscanf()
16
Arquivos
Funo
fwrite()
fread()
feof()
ferror()
rewind()
remove()
fflush()
17
Apaga um arquivo.
Descarrega um arquivo.
Arquivos
Ponteiro de arquivo
Ponteiro o meio comum que une o sistema C ANSI
de E/S.
Um ponteiro de arquivo um ponteiro de
informaes que definem vrias coisas sobre o
arquivo, como seu nome, status e posio atual.
Basicamente, um ponteiro de arquivo identifica um
arquivo especfico em disco e usado pela stream
associada para direcionar as operaes de E/S.
Declarao de um ponteiro de arquivo:
FILE * fp;
18
Arquivos
Abrindo arquivos
Para abrir um arquivo utiliza-se a funo fopen(),
que retorna o ponteiro associado a esse arquivo.
Prottipo da funo fopen():
FILE *fopen(const char* nomearq, const char* modo);
19
Arquivos
Abrindo arquivos
20
a
ab
r+
w+
r+b
w+b
a+
a+b
Arquivos
Abrindo arquivos
Exemplo: abrindo um arquivo de texto TESTE para
escrita:
FILE *fp;
fp = fopen(TESTE, w);
21
Arquivos
Fechando arquivos
Para fechar um arquivo utiliza-se a funo fclose(),
que fecha uma stream que foi aberta pode meio de
uma chamada a fopen().
Ela escreve qualquer dado que ainda permanece no
buffer do disco no arquivo e o fecha normalmente em
nvel do sistema operacional.
Prottipo da funo fclose():
int fclose(FILE *fp);
22
Arquivos
23
Arquivos
24
Arquivos
25
Arquivos
// Programa para escrever caracteres em arquivo
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp;
char ch;
if (argc != 2) { // verifica se o nome do arquivo foi passado via linha de comando
printf("Erro: nome do arquivo inexistente. \n");
exit(1);
}
if ((fp = fopen(argv[1], "w")) == NULL) { // verifica se o arquivo foi aberto
printf("Erro: o arquivo nao pode ser aberto. \n");
exit(1);
}
26
(continua)
Arquivos
do {
ch = getchar(); // l um caractere do teclado
system("PAUSE");
return(0);
}
27
Arquivos
28
Arquivos
// Programa para ler caracteres de arquivo
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp;
char ch;
if (argc != 2) { // verifica se o nome do arquivo foi passado via linha de comando
printf("Erro: nome do arquivo inexistente. \n");
exit(1);
}
if ((fp = fopen(argv[1], "r")) == NULL) { // verifica se o arquivo foi aberto
printf("Erro: o arquivo nao pode ser aberto. \n");
exit(1);
}
29
(continua)
Arquivos
ch = getc(fp); // l um caractere
while (ch != EOF) {
30
Arquivos
31
Arquivos
32
Arquivos
33
Arquivos
// Programa para escrever strings em arquivo
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp;
char str[80];
if (argc != 2) { // verifica se o nome do arquivo foi passado via linha de comando
printf("Erro: nome do arquivo inexistente. \n");
exit(1);
}
if ((fp = fopen(argv[1], "w")) == NULL) { // verifica se o arquivo foi aberto
printf("Erro: o arquivo nao pode ser aberto. \n");
exit(1);
}
34
(continua)
Arquivos
do {
printf("Digite uma string (ENTER para sair): \n");
gets(str);
strcat(str, "\n"); // acrescenta uma nova linha
fputs(str, fp); // escreve a string no arquivo
}while(*str != '\n');
fclose(fp); // fecha o arquivo
system("PAUSE");
return(0);
}
35
Arquivos
36
Arquivos
// Programa para ler strings em arquivo
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp;
char str[80];
if (argc != 2) { // verifica se o nome do arquivo foi passado via linha de comando
printf("Erro: nome do arquivo inexistente. \n");
exit(1);
}
if ((fp = fopen(argv[1], "r")) == NULL) { // verifica se o arquivo foi aberto
printf("Erro: o arquivo nao pode ser aberto. \n");
exit(1);
}
37
(continua)
Arquivos
while (!feof(fp)) {
fgets(str, 79, fp); // l string do arquivo
system("PAUSE");
return(0);
}
38
Arquivos
39
Arquivos
40
Arquivos
41
Arquivos
// Programa para escrever e ler dados no-caracteres em arquivo
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp;
double d1 = 12.23, d2 = 0;
long l1 = 123023L, l2 = 0;
int i1 = 101, i2 = 0;
if ((fp = fopen("test", "wb+")) == NULL) { // verifica nome do arquivo foi aberto
printf("Erro: o arquivo nao pode ser aberto. \n");
exit(1);
}
printf("Escrevendo os dados ... \n");
42
(continua)
Arquivos
fwrite(&d1, sizeof(double), 1, fp); // grava os dados no arquivo
fwrite(&l1, sizeof(long), 1, fp);
Arquivos
44
Arquivos
Apagando arquivos
A funo remove() apaga o arquivo especificado. Seu
prottipo :
int remove(const char *filename);
45
Arquivos
Exerccios:
1. Elabore uma funo que receba um ponteiro de
arquivo, uma string e grave a string no arquivo.
2. Elabore uma funo que receba um ponteiro de
arquivo, leia uma string no arquivo e retorne a string
lida.
3. Elabore um programa que utilize as funes de
leitura e gravao de strings para realizar ambas as
operaes.
4. Com base no programa anterior, elabore um
programa que grave e leia em arquivo registros
contendo informaes de empregados de uma
empresa (nome, cargo, setor, salrio).
46
Arquivos
47