File e FileInfo
A classe File
, no namespace system.IO
, serve para ajudar à construção de objectos FileStream
entre outras coisas. A classe FileInfo
, também no namespace system.IO
, serve para ajudar a criar e destruir ficheiros, entre outras coisas, como encapsular detalhes sobre ficheiros (tamanhos, atributos, timestamps, etc.).
StreamReader e StreamWriter
O StreamWriter
deriva do TextWriter
, de forma análoga o StreamReader
deriva do TextReader
, e definem métodos que permitem a escrita e a leitura de dados textuais para um dado stream.
Eis alguns métodos da classe TextWriter
que nos interessam:
Close()
: fecha oWriter
e liberta os recursos associados (incluindo on handle para o ficheiro).Write()
: escreve a linha para a stream de texto, sem o new line no final da linha.WriteLine()
: escreve a linha para a stream de texto, com o new line no final da linha.Flush()
: limpa os buffers de escrita.
Eis alguns métodos da classe TextReader
que nos interessam:
Read()
: lê informação da stream de texto.ReadLine()
: lê uma linha de caracteres da stream e devolve a informação como uma string.ReadToEnd()
: lê todos os caracteres até ao final da stream e devolve essa infomação como uma única string.
Escrever Ficheiro
Neste exemplo, a classe WriteMyTextFile
irá criar um ficheiro de nome pap.txt
usando a classe FileInfo
. Depois de criar o ficheiro, usando o método CreateText()
, recebe-se um StreamWriter
, que permite enviar strings para a stream, i.e. para o ficheiro de texto que temos actualmente aberto para escrita. Note-se que também é possível enviar dados numéricos através desta stream
using System;
using System.IO;
public class WriteTextfile
{
public static void Main(string[] args)
{
FileInfo t = new FileInfo("pap.txt");
StreamWriter Txt =t.CreateText();
Txt.WriteLine("Visitem o cantinho do C# no fórum
Portugal-a-Programar");
Txt.WriteLine("https://www.portugal-a-programar.pt/");
Txt.Write(Txt.NewLine);
Txt.Close();
}
}
Ler Ficheiro
Neste exemplo, a classe ReadMyTextFile
irá abrir um ficheiro de nome pap.txt
usando a classe FileInfo
. Depois de abrir o ficheiro, usando o método OpenText()
, recebe-se um StreamReader
que permite receber strings da stream, i.e. ler os caracteres do ficheiro de texto que temos actualmente aberto para leitura.
using System;
using System.IO;
public class ReadMyTextFile
{
public static int Main(string[] args)
{
StreamReader re = File.OpenText("pap.txt");
string input = null;
while ((input = re.ReadLine()) != null)
{
Console.WriteLine(input);
}
re.Close();
return 0;
}
}
Ficheiros Binários
Escrever Ficheiro
Neste primeiro exemplo, a classe WriteBinaryFile
irá criar um ficheiro de nome pap.data
usando a classe File. Depois de criar o ficheiro, usando o método Create()
, recebe-se um FileStream
, o qual aplicado a um BinaryWriter
, permite enviar qualquer tipo de dados e guardá-lo no ficheiro.
using System;
using System.IO;
public class WriteBinaryFile
{
public static void Main(string[[]] args)
{
FileStream fs = File.Create(Server.MapPath("pap.dat"));
BinaryWriter bw = new BinaryWriter(fs);
int x = 10;
decimal d = 3.234M;
string str = "Visitem o cantinho do C# no Forum Portugal a Programar.";
bw.Write(x);
bw.Write(d);
bw.Write(str);
bw.Close();
fs.Close();
}
}
Ler Ficheiro
Neste exemplo, a classe ReadBinaryFile
irá abrir um ficheiro de nome pap.data
usando a classe File
. Depois de abrir o ficheiro, usando o método OpenRead()
, recebe-se um FileStream
, o qual aplicado a um BinaryReader
, permite recuperar qualquer tipo de dados.
using System;
using System.IO;
public class ReadBinaryFile
{
public static int Main(string[[]] args)
{
FileStream fs = File.OpenRead(Server.MapPath("pap.data"));
BinaryReader br = new BinaryReader(fs);
Response.Write(br.ReadInt32());
Response.Write(br.ReadDecimal());
Response.Write(br.ReadString());
br.Close();
fs.Close();
}
}
Copiar Ficheiro
Neste exemplo, a classe FileStream
irá abrir o ficheiro calc.exe
(atenção que a localização do ficheiro pode mudar de acordo com a instalação do Windows) e irá escrever uma cópia do ficheiro de nome calc_clone.exe
em c:\
. O acesso ao ficheiro, tanto para leitura como para escrita é efectuado através do FileStream
, sendo um dos argumentos do construtor o modo de acesso ao ficheiro. Uma vez aberto o ficheiro, copia-se o conteúdo do mesmo para um array de bytes: o array de bytes MyData
será tão grande quanto o tamanho da stream, que representa o ficheiro binário, e usando o método Read()
atribui-se o conteúdo do ficheiro ao MyData
. Após a leitura do ficheiro a stream é fechada e passa-se à escrita. Tendo em memória o conteúdo do ficheiro binário, basta escrevê-lo no disco: usando o BinaryWriter()
ligado ao ficheiro que queremos escrever, basta usar o método Write()
com o MyData
como argumento.
using System;
using System.IO;
public class ReadBinaryFile
{
public static int Main(string[[]] args)
{
// Ler
FileStream fsr = new FileStream(@"C:\\winnt\\system32\\calc.exe", FileMode.OpenOrCreate, FileAccess.Read);
byte[[]] MyData= new byte[[fsr.Length]];
fsr.Read(MyData, 0, System.Convert.ToInt32(fsr.Length));
fsr.Close();
// Escrever
FileStream fsw = new FileStream(@"C:\\calc_clone.exe", FileMode.OpenOrCreate, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fsw);
bw.Write(MyData);
bw.Close();
fsw.Close();
}
}