2010-07-09 25 views
10

Estoy trabajando en un proyecto de instalador donde necesito extraer archivos en el disco. ¿Cómo puedo calcular/encontrar el espacio en disco disponible en el disco duro usando C#?¿Cómo calcular el espacio libre en el disco?

+2

No se puede calcular el espacio en disco usando C#. Tendrás que usar .NET. –

Respuesta

9

http://msdn.microsoft.com/en-us/library/system.io.driveinfo.totalfreespace.aspx

Copiado del enlace

using System; 
using System.IO; 

class Test 
{ 
    public static void Main() 
    { 
     DriveInfo[] allDrives = DriveInfo.GetDrives(); 

     foreach (DriveInfo d in allDrives) 
     { 
      Console.WriteLine("Drive {0}", d.Name); 
      Console.WriteLine(" File type: {0}", d.DriveType); 
      if (d.IsReady == true) 
      { 
       Console.WriteLine(" Volume label: {0}", d.VolumeLabel); 
       Console.WriteLine(" File system: {0}", d.DriveFormat); 
       Console.WriteLine(
        " Available space to current user:{0, 15} bytes", 
        d.AvailableFreeSpace); 

       Console.WriteLine(
        " Total available space:   {0, 15} bytes", 
        d.TotalFreeSpace); 

       Console.WriteLine(
        " Total size of drive:   {0, 15} bytes ", 
        d.TotalSize); 
      } 
     } 
    } 
} 
1

¿Es necesario que se preocupe? Simplemente escriba los archivos en el disco y maneje los errores según sea necesario; se asume que tendrá que implementar la reversión de todos modos en caso de que algo no relacionado con el espacio ocurra, así que simplemente trate "sin espacio en el disco" como otro error que necesita para revertir para.

Actualización: Si vienes aquí para rechazar esta respuesta correcta, por favor deja un comentario de por qué.

+0

Enfoque bastante descuidado, ¿no crees? Obtener espacio disponible en el disco antes de tiempo es una cuestión bastante trivial, y puede ahorrarle al usuario muchas molestias al instalar un programa. – jrista

+0

Acepto que debe advertir que la escritura será imposible, pero igual necesitará manejar la unidad que se queda sin espacio durante la copia. –

+2

No creo que sea descuidado en absoluto, y es mucho peor cuando un programa estima incorrecto; hay dos respuestas en este hilo y, hasta el momento, ninguna de ellas está completa. Sin mencionar, ¿qué pasa si tienes que instalar algunos archivos en la unidad del sistema y algunos en la unidad que pidieron? ¿Cómo se explica * que * al usuario? –

9

Utilice la clase System.IO.DriveInfo. Hay dos opciones disponibles ... uno que toma en cuenta las cuotas de disco:

var drive = new DriveInfo("c"); 
long freeSpaceInBytes = drive.AvailableFreeSpace; 

y uno que simplemente proporciona el espacio libre total:

var drive = new DriveInfo("c"); 
long freeSpaceInBytes = drive.TotalFreeSpace; 
2

También puede utilizar WMI.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173(v=vs.85).aspx

using System; 
using System.Management; 

class Test 
{ 
    static void Main() 
    { 
     var moCollection = new ManagementClass("Win32_LogicalDisk").GetInstances(); 

     foreach (var mo in moCollection) 
     { 
      if (mo["DeviceID"] != null && mo["DriveType"] != null && mo["Size"] != null && mo["FreeSpace"] != null) 
      { 
       // DriveType 3 = "Local Disk" 
       if (Convert.ToInt32(mo["DriveType"]) == 3) 
       { 
        Console.WriteLine("Drive {0}", mo["DeviceID"]); 
        Console.WriteLine("Size {0} bytes", mo["Size"]); 
        Console.WriteLine("Free {0} bytes", mo["FreeSpace"]); 
       } 
      } 
     } 
    } 
} 
Cuestiones relacionadas