Sistemas de Arquivo no .NET
O .Net Framework tem classes que nos permitem criar, deletar, navegar, e etc.. arquivos e pastas do Windows. Podemos até criar um Windows Explorer Genérico com todas essas funcionalidades e outras mais.
Todas essas features ficam dentro do namespace System.IO. Abaixo explicarei algumas das possiblidades que o .Net disponibiliza para manipulação de sistema de arquivos.
Manipulando Drives
A classe DriveInfo representa um drive (ex: C:\, CDROM, USB, etc.). Para instanciá-la a partir de um drive existente basta você passar o nome do drive no construtor padrão da classe.
DriveInfo drive = new DriveInfo(@"C:\");
Dentro do objeto drive que instanciamos no exemplo anterior temos alguns métodos e propriedades interessantes para ser usadas. Segue abaixo alguns exemplos:
drive.Name; //Retorna o nome do Drive
drive.AvailableFreeSpace; //Total de espaço disponível
drive.DriveFormat; //Se ele é NTFS ou FAT
drive.DriveType; //Se ele é CDROM, HD, USB e etc..
drive.TotalSize; //Tamanho total
Para retornar todos os drives do computador utilize o seguinte exemplo:
foreach (DriveInfo drive in DriveInfo.GetDrives())
{
Console.WriteLine(drive.Name);
}
Pastas ou Diretórios
De modo semelhante aos drives, você pode utilizar a classe DirectoryInfo para manipular pastas ou diretórios. Para instanciar utilize:
DirectoryInfo diretorio = new DirectoryInfo(@"C:\"); ou DirectoryInfo diretorio = new DirectoryInfo(@"C:\MinhaPasta");
Segue abaixo alguns métodos e propriedades úteis:
diretorio.Name; //Retorna o nome da Pasta
diretorio.CreationTime.ToShortDateString(); //Data de criação
diretorio.Exists; //Verifica se o diretório existe fisicamente
diretorio.FullName; //Path completo
diretorio.Create();//Cria o diretório fisicamente
diretorio.Delete();//Apaga o diretório
diretorio.MoveTo(@"C:\NovoDiretorio\"); //Move o diretório para outro path
Para retornar todos os sub-diretórios do objeto diretório utilize:
foreach (DirectoryInfo subdiretorio in diretorio.GetDirectories())
{
Console.WriteLine(subdiretorio.Name);
}
Para retornar os arquivos de sistema:
foreach (FileSystemInfo arquivoSistema in diretorio.GetFileSystemInfos())
{
Console.WriteLine(arquivoSistema.Name);
}
E para retornar todos os arquivos:
foreach (FileInfo arquivo in diretorio.GetFiles())
{
Console.WriteLine(arquivo.Name);
}
Pastas ou Diretórios 2
Existe também a classe Diretory, que trabalha de forma estática e de modo muito semelhante a classe DirectoryInfo. Segue abaixo algumas métodos úteis da classe directory para você obter informações.
Console.WriteLine(Directory.Exists(@"C:\Teste")); //Verifica se o diretório existe fisicamente
Console.WriteLine(Directory.GetCreationTime(@"C:\Teste")); //Retorna a data de criação do diretório
Console.WriteLine(Directory.GetCurrentDirectory()); //Retorna o diretório atual da aplicação
Para manipulação, a classe contem os seguintes métodos.
Directory.CreateDirectory(@"C:\Teste"); //Cria um diretório
Directory.Move(@"C:\Teste", @"C:\Teste2"); //Move o diretório
Directory.Delete(@"C:\Teste2"); //Delete a o diretório
Com a classe Directory você pode retornar um array de strings contendo todos os arquivos ou diretórios contido dentro de um path.
//Retorna todos os diretórios
foreach (string diretorio in Directory.GetDirectories(@"C:\"))
{
Console.WriteLine(diretorio);
}
//Retorna todos os arquivos
foreach (string arquivo in Directory.GetFiles(@"C:\"))
{
Console.WriteLine(arquivo);
}
Arquivos
Para manipular arquivos é da mesma forma, porem utilizando a classe FileInfo:
FileInfo arquivo = new FileInfo("teste.txt"); //Por Default a pasta padrão é ~\bin\debug
FileInfo arquivo = new FileInfo(@"C:\teste.txt"); //O construtor também aceita o path completo
Segue abaixo alguns métodos úteis:
Console.WriteLine(arquivo.Name); //Retorna o nome da Pasta
Console.WriteLine(arquivo.CreationTime.ToShortDateString()); //Data de criação
Console.WriteLine(arquivo.Exists); //Verifica se o diretório existe fisicamente
Console.WriteLine(arquivo.FullName); //Path completo
Também é possível manipular o arquivo dentro do FileInfo
arquivo.Create(); //Cria um arquivo físico baseado no FileInfo
arquivo.CreateText(); //Cria um StreamWriter e um novo arquivo para ser escrito
arquivo.CopyTo(@"c:\teste2.txt"); // Cria uma cópia do arquivo físico
arquivo.MoveTo(@"c:\teste2.txt"); // Move o arquivo físico para um novo arquivo
arquivo.Delete(); // Deleta o arquivo físico
Arquivos2
Outra forma de você manipular arquivos é utilizando a classe File. Ela tem funcionalidade muito semelhantes a classe FileInfo, porém trabalha de forma estática, ou seja, sem precisar instanciar o objeto.
File.Create(@"C:\teste.txt"); //Cria um arquivo físico
File.CreateText(@"C:\teste.txt"); //Cria um StreamWriter e um novo arquivo para ser escrito
File.Copy(@"C:\teste.txt", @"C:\teste2.txt"); // Cria uma cópia do arquivo físico
File.Move(@"C:\teste.txt", @"C:\teste3.txt"); // Move o arquivo físico para um novo arquivo
File.Delete(@"C:\teste3.txt"); //Deleta o arquivo físico
Console.WriteLine(File.Exists(@"C:\teste2.txt")); //Verifica se o arquivo existe fisicamente
E por enquanto é isso pessoal. Escreverei mais sobre sistemas de arquivo no .Net no meu próximo post.