miércoles, 31 de octubre de 2007

Sistema de Archivos: Unidades de Disco

La clase DriveInfo nos brinda los elementos necesarios para poder acceder a la información de las unidades disponibles en nuestro sistema. esto incluye no solo los discos rigidos, sino las unidades de red que tengamos mapeadas, unidades extraibles, etc.-

Esta clase posee un único metodo estático (GetDrives()) el cual devuelve la lista de todas las unidades de nuestro sistema.

Las instancias de esta clase cuentan con las siguientes propiedades:
- AvailableFreeSpace: Retorna el espacio disponible de una unidad (en bytes). Puede diferir del valor retornado por TotalFreeSpace, dependiendo de las cuotas de discos.
- DriveFormat: Retorna el formato de la unidad tal como FAT32 o NTFS.
- DriveType: Retorna una enumeración (ver el ejemplo) para el tipo de la unidad (Fijo, Optico, Red, etc.)
- IsReady: Retorna el estado de la unidad. Especifica si la unidad esta lista para ser accedida (por ejemplo no es posible acceder a mi unidad de CD mientras escucho mi CD de musica)
- Name: El nombre de la unidad.
- RootDirectory: Retorna un objeto DirectoryInfo que representa el directorio raiz de la unidad.
- TotalFreeSpace: Retorna el total de espacio libre en la unidad (en bytes).
- TotalSize: Retorna el tamaño total de la unidad.
- VolumeLabel: Retorna o escribe una etiqueta para unidades que no sean de solo lectura (CD/DVD).

Veamos un ejemplo utilizando algunos de estos conceptos:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace Exam70536.FileSystemTest
{
class Program
{
private const string HARD_DRIVES = "Unidades de Discos duros";
private const string NETWORK_DRIVES = "Unidades de Red";
private const string OPTICAL_DRIVES = "Unidades de CD/DVD";
private const string REMOVABLE_DRIVES = "Unidades Extraibles";
private const string LINE = "--------------------------------------------";

static void Main(string[] args)
{
ViewSystemDrives();
Console.ReadKey();
}

private static void ViewSystemDrives()
{
DriveInfo[] drives = DriveInfo.GetDrives();
List<DriveInfo> hardDrives = null;
List<DriveInfo> opticalDrives = null;
List<DriveInfo> netDrives = null;
List<DriveInfo> remDrives = null;

try
{
hardDrives = new List<DriveInfo>();
opticalDrives = new List<DriveInfo>();
netDrives = new List<DriveInfo>();
remDrives = new List<DriveInfo>();

foreach (DriveInfo drive in drives)
{
switch (drive.DriveType)
{
case DriveType.CDRom:
if (drive.IsReady)
opticalDrives.Add(drive);
break;
case DriveType.Fixed:
hardDrives.Add(drive);
break;
case DriveType.Network:
netDrives.Add(drive);
break;
case DriveType.NoRootDirectory:
break;
case DriveType.Ram:
break;
case DriveType.Removable:
remDrives.Add(drive);
break;
case DriveType.Unknown:
break;
default:
break;
}
}

Console.WriteLine(HARD_DRIVES);
Console.WriteLine(LINE);
foreach (DriveInfo hDrive in hardDrives)
{
Console.WriteLine("{0} Tamaño:{1}GB Espacio disponible:{2}GB",
hDrive.Name,
hDrive.TotalSize / 1024 / 1024 / 1024,
hDrive.AvailableFreeSpace / 1024 / 1024 / 1024);
}

Console.WriteLine();
Console.WriteLine(OPTICAL_DRIVES);
Console.WriteLine(LINE);
foreach (DriveInfo oDrive in opticalDrives)
{
Console.WriteLine("{0}", oDrive.Name);
}

Console.WriteLine();
Console.WriteLine(REMOVABLE_DRIVES);
Console.WriteLine(LINE);
foreach (DriveInfo rDrive in remDrives)
{
Console.WriteLine("{0}", rDrive.Name);
}

Console.WriteLine();
Console.WriteLine(NETWORK_DRIVES);
Console.WriteLine(LINE);
foreach (DriveInfo nDrive in netDrives)
{
Console.WriteLine("{0}", nDrive.Name);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}