Manipulando drivers, arquivos e diretórios em .NET

Veja neste artigo como manipular drivers, arquivos e diretórios em aplicações construídas com base no framework .NET.

O namespace System.IO contém todas as classes necessárias para a manipulação de arquivos e diretórios. Algumas classes fornecem suporte assíncrono, o que permite ler dados de um arquivo sem a necessidade de “congelar” a tela que o usuário está utilizando.

Drives no .NET

A partir do .NET Framework 2.0 temos uma classe chamada DriveInfo. Essa classe basicamente acessa informações de um determinado drive. Essa classe possui vários métodos e propriedades para manipular um determinado drive do computador. Além desses membros de instância, temos um método estático chamado GetDrives que retorna um array de objetos do tipo DriveInfo, onde cada um representa um drive do computador onde a aplicação está sendo executada.

Propriedades da classe DriveInfo:

 

Listagem 1: Exemplo de utilização da classe DriveInfo

using System.IO; foreach (DriveInfo d in DriveInfo.GetDrives()) { if (d.IsReady) { Console.WriteLine(d.DriveType.ToString()); Console.WriteLine(d.Name); } }

Diretórios

Assim como a classe DriveInfo, também temos uma classe estática chamada Directory, que permite manipularmos os diretórios que existem na máquina em que a aplicação está sendo executada ou de algum outro local, dependendo da autorização. Esta classe pussui métodos estáticos para mover, criar, renomear e excluir diretórios. Além disso, permite recuperar todos os seus subdiretórios e arquivos para manipulá-los ou exibí-los.

Ainda há a classe DirectoryInfo que também permite executar as mesmas operações que a classe Directory fornece, mas agora para um diretório específico. Se você precisar invocar várias propriedades e/ou métodos relacionados a um diretório, considere o uso desta classe em relação a classe Directory, porque a checagem de segurança não será sempre necessária.

Principais propriedades da classe DirectoryInfo:

   

Listagem 2: Exemplos de como criar, ler o conteúdo e apagar um determinado diretório

using System.IO; string path = @"c:\Temp\Arquivos"; DirectoryInfo dir = null; if (!Directory.Exists(path)) dir = Directory.CreateDirectory(path); //criação do diretório if (dir != null) { //Sub-diretórios foreach(DirectoryInfo subDir in dir.GetDirectories()) //pega informacoes do diretorio criado Console.WriteLine(subDir.Name); //Arquivos foreach (FileInfo fileName in dir.GetFiles()) //loop em todos os arquivos do diretorio Console.WriteLine(fileName.Name); dir.Delete(true); }

O método GetFiles() ainda possui um overload que permite informar qual tipo de arquivos que desejamos recuperar, como: se desejarmos apenas recuperar os arquivos texto, então poderíamos fazer: dir.GetFiles(“*.txt”). Finalmente chamamos o método Delete para excluir o diretório. O parâmetro True que passamos para ele, indica que será uma exclusão recursiva, ou seja, tudo que estiver dentro dele, também será excluído.

Observação: quando invocamos os métodos estáticos GetDirectories e GetFiles da classe Directory, é retornado um array de string contendo os nomes dos diretórios e arquivos, respectivamente.

Arquivos

Temos duas classes para manipulação de arquivos: File e FileInfo.

A classe File possui métodos estáticos para as operações mais comuns com arquivos, como criação, cópia, exclusão e a movimentação de arquivos.

Já a classe FileInfo traz informações completas de um determinado arquivo, além de fornecer as operações típicas e, como já era de se esperar, operando apenas com o arquivo que ela representa. Assim como a classe DirectoryInfo, utilize-a somente se precisar efetuar várias operações em cima deste arquivo. Do contrário, opte pela uso da classe File que, para uma única operação, é mais performática.

Principais propriedades da classe FileInfo:

Listagem 3: Exemplode uso das classes File e FileInfo

using System.IO; string fileName = "Arquivo.txt"; if (!File.Exists(fileName)) { File.Create(fileName); FileInfo info = new FileInfo(fileName); Console.WriteLine(info.CreationTime); File.Delete(fileName); }

Manipulando caminhos (paths)

A classe Path encapsula todo o trabalho para manipular caminhos de arquivos e diretórios. Além disso, as operações são executadas para suportar multi-plataforma, ou seja, como isso pode variar de sistema operacional para sistema operacional, a classe Path se encarrega de retornar o valor correto baseando-se na plataforma que a aplicação está sendo executada.

Alguns métodos: 

Artigos relacionados