C# - Obtendo informações de todos os drives


Neste artigo vou mostrar como podemos informação de todos os drives do sistema local usando C#.

Como fazer para que sua aplicação saiba se um drive (HDD, CD drive, DVD drive, BluRay drive, etc) esta disponível e pronto para ser acessado para escrita ou leitura, bem como conhecer o espaço disponível no drive ?

A linguagem C# oferece a classe DriveInfo que modela uma unidade e fornece métodos e propriedades para consultar informações sobre a unidade.

Usamos a classe DriveInfo para determinar quais unidades estão disponíveis e quais os tipo de unidades, e, também podemos consultar a capacidade e o espaço livre disponível na unidade.

Vejamos um exemplo prático usando a classe DriveInfo.

recursos usados:

  • Visual Studio 2017 Community

Criando o projeto Console

Crie um projeto do tipo Console App(.NET Framework) com o nome DemoDriveInfo

A seguir inclua o código abaixo no arquivo Program.cs :

using System;
using System.Diagnostics;
using System.IO;
namespace ModoConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            ExibeInforTodosDrives();
            Console.ReadLine();
        }
        public static void ExibeInforTodosDrives()
        {
            DriveInfo[] drives = DriveInfo.GetDrives();
            Array.ForEach(drives, drive =>
            {
                if (drive.IsReady)
                {
                    Console.WriteLine($"Drive {drive.Name} esta pronto.");
                    Console.WriteLine($"Espaço disponível livre: {drive.AvailableFreeSpace} bytes  
ou {FormataBytes(drive.AvailableFreeSpace)} ");
                    Console.WriteLine($"Formato : {drive.DriveFormat}");
                    Console.WriteLine($"Tipo: {drive.DriveType}");
                    Console.WriteLine($"Nome: {drive.Name}");
                    Console.WriteLine("Nome Completo da Raiz : " +  $"{drive.RootDirectory.FullName}");
                    Console.WriteLine($"Espaço total Livre : {drive.TotalFreeSpace} bytes 
ou {FormataBytes(drive.TotalFreeSpace)}");
                    Console.WriteLine($"Espaço Total : {drive.TotalSize} bytes ou {FormataBytes(drive.TotalSize)}");
                    Console.WriteLine($"Volume Label: {drive.VolumeLabel}");
                }
                else
                {
                    Console.WriteLine($"Drive {drive.Name} não esta pronto.");
                }
                Console.WriteLine();
            });
        }
        private static string FormataBytes(long bytes)
        {
            if (bytes >= 0x1000000000000000) { return ((double)(bytes >> 50) / 1024).ToString("0.### EB"); }
            if (bytes >= 0x4000000000000) { return ((double)(bytes >> 40) / 1024).ToString("0.### PB"); }
            if (bytes >= 0x10000000000) { return ((double)(bytes >> 30) / 1024).ToString("0.### TB"); }
            if (bytes >= 0x40000000) { return ((double)(bytes >> 20) / 1024).ToString("0.### GB"); }
            if (bytes >= 0x100000) { return ((double)(bytes >> 10) / 1024).ToString("0.### MB"); }
            if (bytes >= 0x400) { return ((double)(bytes) / 1024).ToString("0.###") + " KB"; }
            return bytes.ToString("0 Bytes");
        }
    }
} 
 

Temos o método ExibeInforTodosDrives() que usa o método GetDrives() para recuperar os nomes das unidades de todas as unidades lógicas do computador.

A seguir usamos a propriedade IsReady que determina se a unidade está pronta para ser consultada, gravada ou lida
mas não é muito confiável, pois esse estado pode mudar rapidamente. Ao usar IsReady, certifique-se de considerar o caso em que a unidade também não está pronta.

Depois
usamos as propriedades da classe DriveInfo:

  • Name - Obtém o nome da undidade;
  • AvailableFreeSpace - Indica o valor do espaço livre disponível em uma unidade, em bytes;
  • DriveFormat - Obtém o nome do sistema de arquivos, como NTFS ou FAT32;
  • TotalFreeSpace - Obtém a quantidade total de espaço livre disponível em uma unidade, em bytes;
  • RootDirectory - Obtém o diretório raiz de uma unidade;
  • TotalSize - Obtém o tamanho total do espaço de armazenamento em uma unidade;
  • VolumeLabel - Obtém ou define o rótulo do volume de uma unidade;
  • DriveType - Obtém o tipo de unidade, como CD-ROM, removível, de rede ou fixa;

Executando este código teremos o resultado abaixo:

Usamos o método FormataBytes() para formatar o resultado de bytes para Gigabytes no exemplo.

Pegue o projeto completo aqui :    DemoDriveInfo.zip

"Aquele que nem mesmo a seu próprio Filho poupou, antes o entregou por todos nós, como nos não dará também com ele todas as coisas ? "
Romanos 8:32

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

Referências:


José Carlos Macoratti