Você está na página 1de 15

Ficheiros:

Uma sequncia de bytes (1 B=8bits) armazenados em


memria secundria.
Permitem armazenar dados de forma no voltil.
Maior capacidade de armazenamento que a memria
primria.
Os dados so lidos para memria primria para
processamento (da o nome memrias secundrias).
Para guardar as alteraes, os dados tero de ser escritos
para ficheiro.

1
Ficheiros:

Quanto ao modo de acesso:


Sequencial: o acesso aos dados do ficheiro feito
sequencialmente do inicio para o fim. O tempo de acesso ao
dados diretamente proporcional ao tamanho do ficheiro.
Exemplos de ficheiros de acesso sequencial: ficheiros de
texto (o contedo s pode ser processado em sequncia).

Aleatrio ou directo: possvel aceder directamente a


uma posio do ficheiro sem passar pelas anteriores.
Acesso + rpido e (praticamente) independente do tamanho
do ficheiro.
Exemplos de ficheiros de acesso direto: Agenda de
contactos.

2
Quanto ao contedo:

Ficheiros de texto:
caracteres ASCII,
o contedo legivel,
estrutura dos dados no est includa no ficheiro.
Extenso caracterstica do nome: *.txt

Ficheiros binrios:
escreve os dados no formato original das variveis (inteiros,
reais,string,bool )
No legvel, a estrutura dos dados no est includa no
ficheiro.
Processamento mais rpido e ficheiros de menor tamanho.
Geralmente s podem ser lidos por software que conhece o
formato do ficheiro.

3
Quanto ao contedo:

Ficheiros com estrutura (xml, json):


texto ASCII que incluem os dados e a sua estrutura.
Legveis quer por sistemas digitais e humanos.
Permitem facilmente a troca de dados entre sistemas.

Operaes (tpicas) sobre ficheiros:


Abrir, posicionar, ler/escrever dados e fechar o ficheiro.

4
Exemplo de escrita de ficheiro de texto:

// acrescentar using System.IO;


string nomeficheiro =
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +
@\ + interaction.inputbox( nome do ficheiro ?);

if (!System.IO.File.Exists(nomeficheiro))
{ using(StreamWriter sw = File.CreateText(nomeficheiro)) // cria ficheiro de
// texto.
{ for(int c=0; c<agenda.Length; c++)
{ sw.WriteLine(agenda[c].Nome);
sw.WriteLine(agenda[c].tel);
sw.WriteLine(agenda[c].email); }
}
else
{ using(StreamWriter sw = File.AppendText(nomeficheiro)) // acrescenta no
// fim do ficheiro.
{ sw.WriteLine(nome=, nome); } 5
Exemplo de leitura de ficheiro de texto:

string nomeficheiro =
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +
@\ + inputbox( nome do ficheiro ?);

if (File.Exists(nomeficheiro))
{ using (StreamReader sr = File.OpenText(nomeficheiro))
{ while ((nome= sr.ReadLine()) != null)
{ MessageBox.Show(nome= + nome);
}
}
else
{ MessageBox.show(O ficheiro + ficheiro + no existe);
}

Ex: Criar 2 botes Guardar Agenda e Ler Agenda para


guardar / ler a agenda de contactos para ficheiro de texto.

6
Exemplo de escrita de ficheiro binrio:

string ficheiro =
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +
@exemplo.dat
using ( BinaryWriter writer = new BinaryWriter(File.Open(fileName,
FileMode.Create)) )
{
writer.Write(1.250F); // escreve um real
writer.Write(@"c:\Temp"); // escreve um texto
writer.Write(10); // escreve um inteiro
writer.Write(true); // um booleano;
}

7
Exemplo de leitura de ficheiro binrio:

string ficheiro =
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +
@\exemplo.dat;

float real; string texto; int numero; bool logico;


if (File.Exists(fileName))
{
using (BinaryReader reader = new BinaryReader(File.Open(fileName,
FileMode.Open)))
{ real= reader.ReadSingle(); texto= reader.ReadString();
numero= reader.ReadInt32(); logico= reader.ReadBoolean(); }
MessageBox.Show(Real: " + real + texto: " + texto + inteiro: " + numero +
Lgico: " + logico); }

Ex: Criar 2 botes Gravar Agenda ( formato binrio) / Ler Agenda (


formato binrio).

8
Outras operaes sobre ficheiros:

File.Exists(string): devolve V/F se o ficheiro existe/no existe.

File.Delete( string): apaga o ficheiro especificado.

File.Move(string1,string2): move o ficheiro da localizao string1 para a


localizao string2.

File.Copy(String1, String2): copia o ficheiro da localizao string1 para a


localizao string2.

File.Encrypt(String): codifica o ficheiro, apenas o utilizador pode


descodificar com File.Decrypt(string).

Ver classe de ficheiro: https://msdn.microsoft.com/en-


us/library/system.io.file(v=vs.110).aspx

9
Outras operaes sobre ficheiros:

File.Exists(string): devolve V/F se o ficheiro existe/no existe.

File.Delete( string): apaga o ficheiro especificado.

File.Move(string1,string2): move o ficheiro da localizao string1 para a


localizao string2.

File.Copy(String1, String2): copia o ficheiro da localizao string1 para a


localizao string2.

File.Encrypt(String): codifica o ficheiro, apenas o utilizador pode


descodificar com File.Decrypt(string).

Ver classe de ficheiro (System.IO.File): https://msdn.microsoft.com/en-


us/library/system.io.file(v=vs.110).aspx

10
Gravao por serializao
A serializao permite transformar um objecto numa sequncia de dados
para poder ser gravado em ficheiro.
A deserializao realiza a operao inversa reconstruindo o objeto a partir
dos dados lidos em formato de texto.
Simplificam as operaes de escrita/leitura de ficheiros.

Permite:
Gravar estruturas completas para ficheiro.
Mais simples (no necessrio percorrer os dados).
No ficheiro so gravados dados e informao sobre os dados ( ver xml).
Mais indicados para trocar dados entre sistemas diferentes
O processamento pode demorar mais que ficheiros de texto e binrios (
para as situaes comuns no comum notar-se diferena)

11
Gravao por serializao

Nota: necessrio incluir a palavra reservada [serializable] na declarao da


estrutura contacto.

Gravao:
IFormatter formatador = new BinaryFormatter();
Stream stream = new FileStream(ficheiro.bin", FileMode.Create);
formatador.Serialize(stream, agenda); // grava a agenda toda de uma vez.
stream.Close();

Leitura:
IFormatter formatador = new BinaryFormatter();
Stream stream = new FileStream("agenda.bin", FileMode.Open);
agenda = (contacto[]) formatador.Deserialize(stream); // le a agenda toda
stream.Close();

12
Exerccio:

1) Declarar uma estrutura de dados designada record para armazenar um


nome (string), pontos (inteiro) e tempo em segundos ( inteiro). Os
recordes devem ter todos os campos preenchidos.
2) Construir um programa com 4 operaes:
a) Acrescentar um registo ao ficheiro, i.e., l um registo de dados e
acrescenta ao ficheiro.
b) Listar os registos actualmente existentes no ficheiro.
c) Dados o nome de 2 ficheiros copiar os records do 1 ficheiro para
o 2. Se o 2 ficheiro j existir pedir um novo nome.
d) Apagar um ficheiro cujo nome foi fornecido pelo utilizador.
Nota: para as opes em que o utilizador indica ficheiros pode ser utilizador
caixas de dialogo de ficheiros.

13
Gravar/ler outros formatos

necessrio importar o software que manipula esse formato. Ex: json.


Idntico ao xml mas gera ficheiros de menor tamanho.
// Tools -> nuget package manager -> Manage Nuget packages for solution ->
Newtonsoft.Json;
Incluir using Newtonsoft.Json
A classe JsonConvert.
Exemplo de gravao:
string nomeficheiro = Interaction.InputBox(" Nome do ficheiro");
nomeficheiro = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
+ @"\" + nomeficheiro;

string json = JsonConvert.SerializeObject(agenda); // converte o vetor de


//contactos em texto (formato Json).
File.WriteAllText(nomeficheiro, json); // grava o texto.

14
Gravar/ler outros formatos

Exemplo de leitura (do formato Json):

string nomeficheiro = Interaction.InputBox(" Nome do ficheiro");


nomeficheiro =
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\"
+ nomeficheiro;

string json = File.ReadAllText(nomeficheiro); // le o ficheiro que


//descreve o objecto no formato Json.
agenda = JsonConvert.DeserializeObject<contacto[]>(json);
// converte o texto lido num vetor de contactos.

15