Académique Documents
Professionnel Documents
Culture Documents
Objetivos do mdulo:
Contedos do mdulo:
- Conceitos gerais;
Definio
As estruturas de dados estudadas at este mdulo tm em comum o facto de serem volteis, ou seja, os dados que
contm perdem-se quando a corrente eltrica desligada.
Esta limitao resolvida com o sistema de ficheiros, o sistema operativo organiza o espao dos dispositivos de
armazenamento externos ou secundrios atravs de um sistema de ficheiros baseado no princpio real de um
armrio com vrias gavetas que podem organizar diferentes ficheiros dentro delas.
Neste sistema cada ficheiro possui alguns atributos que podem variar de sistema de ficheiros para sistema de
ficheiros bem como em diferentes sistemas operativos. Alguns desses atributos so:
- Nome
- Identificador
- Tamanho
Os ficheiros de dados so os documentos criados pelas aplicaes: textos, imagens, vdeos, sons, bases de dados,
pginas web, etc.
Criao de ficheiros
O processo de criar um ficheiro passa por estabelecer uma ligao entre uma varivel interna do programa e um
ficheiro num determinado dispositivo.
FILE *ficheiro;
Este ponteiro utilizado no cdigo sempre que alguma instruo se refira ao ficheiro.
O passo seguinte criar ou abrir o ficheiro caso ele j exista, para isso temos a funo fopen.
Esta funo recebe dois parmetros, o primeiro o nome do ficheiro e o segundo modo de acesso pretendido ao
ficheiro. Caso no seja possvel abrir ou criar o ficheiro o ponteiro devolvido pela funo fica a NULL.
O nome do ficheiro pode incluir a pasta onde este se localiza, para isso, no caso de ser necessrio utilizar o carater
separador das pastas \ e porque essa barra pode ser utilizada para os carateres especiais como o \n devem ser
utilizadas sempre duas barras \\.
Os modos de acesso so definidos atravs da combinao de letras cujo significado apresentado na seguinte tabela
(utilizar sempre minsculas):
r Acesso somente para leitura (caso o ficheiro no exista o ponteiro fica a NULL)
w Acesso para escrita (caso no exista o ficheiro criado, caso exista o ficheiro destrudo)
a Acesso para adicionar (caso no exista o ficheiro criado)
r+ Acesso para leitura e escrita (comea pelo inicio)
w+ Acesso para leitura e escrita (caso no exista o ficheiro criado, caso exista o ficheiro
destrudo)
a+ Acesso para leitura e escrita (caso no exista o ficheiro criado)
b Acesso em modo binrio
ficheiro=fopen(c:\\teste.txt,r);
FILE *ficheiro;
ficheiro=fopen(c:\\teste.txt,r);
fclose(ficheiro);
Um programa pode ter vrios ficheiros abertos em simultneo desde que associe diferentes ponteiros a cada um.
Para ler e escrever num ficheiro de texto existem diversas funes sendo as mais simples as funes fprintf e fscanf
que, como o nome deixa antever, so o equivalente ao printf e scanf.
Exemplo:
FILE *ficheiro;
ficheiro=fopen(c:\\teste.txt,w);
fprintf(ficheiro,Ol mundo\n);
fclose(ficheiro);
(ver m7_exemplo1.cpp)
Quando falha a gravao a funo devolve EOF seno devolve c (ou seja o mesmo valor que recebe no primeiro
parmetro).
(ver m7_exemplo2.cpp)
Para alm desta funo temos fgetc para ler letra a letra e ainda fgets para ler linhas inteiras do ficheiro.
A funo fgets l n-1 carateres e acrescenta \0 no final da string. Se a funo encontrar uma quebra de linha (\n) ou o
fim do ficheiro (EOF) termina a leitura antes de ler os n-1 carateres. Ao contrrio da funo fscanf l os espaos em
branco sem quebras ou divises.
Para ler um ficheiro at ao fim utilizamos a funo feof(FILE *ficheiro) que permite avaliar se o final do ficheiro foi ou
no atingido. Esta funo s devolve verdadeiro quando a leitura falhou devido a no haver mais dados.
No esquecer que para adicionar texto ao ficheiro necessrio abrir com modo de acesso correto.
Estas funes permitem ler e escrever em ficheiros de texto, isto quer dizer que todas as operaes de escrita e
leitura sofrem converses como por exemplo os carateres especiais \n so convertidos em quebras de linha, \t em
tabulaes, bem como os dados gravados so sempre convertidos em carateres da tabela ASCII, sejam letras ou
nmeros.
Os ficheiros de texto so teis para guardar pequenos textos sem configurao ou formatao mas, para dados mais
complexos, como dados multimdia (imagens, vdeo ou som) ou bases de dados no podem ser utilizados, para isso
temos os ficheiros binrios.
As operaes de leitura e gravao num ficheiro binrio so feitas sem qualquer converso, os dados so gravados
no seu formato original sem converso para o respetivo carater ASCII, por exemplo quando se grava um valor
numrico num ficheiro de texto este convertido no respetivo carater da tabela ASCII ao contrrio dos ficheiros
binrios que registam o valor binrio do nmero.
Durante o processo de escrita e leitura o ficheiro mantm um cursor que indica a posio dentro do ficheiro, este
cursor indica onde a prxima operao de leitura ou escrita vai ocorrer dentro do ficheiro.
Estas duas funes no devem ser utilizadas com ficheiros de texto pois o seu comportamento no o mesmo tendo
em conta as converses feitas nesse tipo de ficheiros.
Quando executamos uma operao de escrita num ficheiro os dados no so imediatamente escritos, na realidade
estes so enviados para uma memria intermdia (buffer) de onde so descarregados para o ficheiro quando este
buffer estiver cheio.
Para garantir que os dados so efetivamente gravados no ficheiro podemos utilizar a funo fflush:
Estas funes so utilizadas para guardar vetores completos com uma s linha de cdigo e podem tambm ser
utilizadas com estruturas para criar ficheiros de dados.
Apagar ficheiros:
int remove(const char *ficheiro) apaga o ficheiro e devolve zero se conseguiu remover.
Mudar nome:
int rename(const char *antigo, const char *novo) muda o nome do ficheiro ou pasta, devolve zero se conseguiu.
Fontes:
https://pt.wikipedia.org/wiki/Sistema_de_ficheiros
www.cprogramming.com/tutorial/cfileio.html
http://www.tutorialspoint.com/cprogramming/c_file_io.htm
www.dirac.org/linux/programming/tutorials/files_in_C/
www.cs.bu.edu/teaching/c/file-io/intro/
www.cplusplus.com