sábado, 18 de julio de 2015

Receta C# No. 5-16: Cómo Obtener el Espacio Total Libre de una Unidad de Disco

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
3.1 Clase DriveInfo y la propiedad AvailableFreeSpace
4. Práctica: Código C#
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

Otra de las operaciones comunes en el manejo de archivos y directorios consiste en calcular el espacio libre en una unidad de disco. Desde luego que C# cuenta con los medios para llevar a cabo esta tarea de manera efectiva y eficiente. Aprovecharemos esta receta C# para estudiar y comprender algunos detalles relacionados con esta operación.

1. Problema

Debemos poder examinar una unidad de disco local o de red y determinar su espacio total libre (en bytes).

2. Solución

En el namespace System.IO disponemos de la clase DriveInfo; con esta clase y la propiedad AvailableFreeSpace obtenemos el espacio total disponible de una unidad de disco local o de red.

3. Discusión de la Solución

3.1 Clase DriveInfo y la propiedad AvailableFreeSpace

La clase DriveInfo [2] (namespace System.IO) permite acceder a la información de una unidad de disco. Y entre sus miembros en particular nos interesa conocer detalles acerca de la propiedad AvailableFreeSpace [3].

La propiedad AvailableFreeSpace está declarada de la siguiente forma

public long AvailableFreeSpace { get; }

Notamos que el valor devuelto es un entero de 64 bits (i.e., long). Además, es una propiedad de sólo lectura.

Podemos escribir el siguiente código C# para conocer su utilidad:

En la línea 15 usamos el método static GetDrives [4] para obtener el conjunto de unidades disponibles en el sistema. Iteramos este arreglo de objetos DriveInfo con el ciclo foreach de las líneas 16-25. La información a mostrar por unidad comprende:
  • Letra de unidad, 
  • Formato de unidad (e.g., NTFS, FAT32), 
  • Nombre de volumen, 
  • Espacio total disponible (en bytes)
Compilación:


  1. csc /target:exe UsoDriveInfo.cs

Ejecución assembly:


  1. .\UsoDriveInfo.cs

>  Prueba de ejecución:
Ejecución assembly UsoDriveInfo.exe
Figura 1. Ejecución assembly UsoDriveInfo.exe.

Por otra parte, también es posible crear una instancia de la clase DriveInfo y pasar como argumento ya sea:
  • la letra de la unidad: C, D, E, etc., o 
  • la ruta raíz (root) de la unidad, por ejemplo, C:\.
La instancia nos permite acceder a otros métodos y propiedades útiles para obtener la información de una unidad de disco local o de red (en caso de no estar disponible, la excepción System.IO.IOException es lanzada) [1].

4. Práctica: Código C#

Ahora escribiremos una aplicación consola muy interesante para permitir al usuario pasar como argumento una letra de unidad y dejar que la aplicación muestra información relacionada. (Nota: En caso de que el usuario no pase ningún argumento se mostrará la información de todas las unidades configuradas en la máquina.)

Con la sentencia if (línea 15) validamos que el usuario haya ingresada un sólo argumento. Cuando esto es así, se muestra el espacio total disponible para esa unidad.


Cuando el usuario ha introducido dos o más argumentos desde la línea de comandos, entonces con el ciclo foreach de la línea 26 se iterará por el conjunto de unidades de la máquina y se mostrará el espacio total disponible por cada unidad. Cuando una unidad no está conectada o no está disponible se lanza la excepción IOException.

Compilación:


  1. csc /target:exe InformacionUnidad.cs

Ejecución assembly:


  1. .\InformacionUnidad.exe

> Prueba de ejecución:
Ejecución assembly InformacionUnidad.exe
Figura 2. Ejecución assembly InformacionUnidad.exe.

5. Conclusiones

Ya conocemos el medio para la obtención del espacio total disponible de unidad de disco. Aprendimos que con el método static GetDrives de la clase DriveInfo podemos obtener un arreglo de objetos DriveInfo e iterar por cada uno de ellos para mostrar la información de unidad, entre esta información el espacio total disponible; o alternativamente podemos crear una instancia de la clase DriveInfo pasando como argumento la letra de la unidad.


En la próxima receta C# aprenderemos a mostrar los diálogos comunes de selección, apertura, guardado de archivos.

6. Glosario

  • Archivo
  • Bytes
  • Directorio
  • Excepción
  • Ruta
  • Unidad de disco

7. Literatura & Enlaces

[1]: Visual C# 2010 Recipes by Allen Jones and Adam Freeman. Copyright 2010 Allen Jones and Adam Freeman, 978-1-4302-2525-6.
[2]: DriveInfo Class (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.driveinfo(v=vs.110).aspx
[3]: DriveInfo.AvailableFreeSpace Property (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.driveinfo.availablefreespace(v=vs.110).aspx
[4]: DriveInfo.GetDrives Method (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.driveinfo.getdrives(v=vs.110).aspx


M

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.