web-dev-qa-db-fra.com

Comment puis-je vérifier l'espace disque disponible?

J'ai besoin d'un moyen de vérifier l'espace disque disponible sur une télécommande Server Windows avant de copier des fichiers sur ce serveur. Utilisation de cette méthode, je peux vérifier si le serveur principal est plein et s'il est, alors je vais copier les fichiers sur un serveur secondaire.

Comment puis-je vérifier l'espace disque disponible à l'aide de C #/ASP.NET 2.0?

21
Bryan Denny

Vous pouvez le vérifier en procédant comme suit:

Ajouter le System.Management.dll comme référence à votre projet.

Utilisez le code suivant pour obtenir le disque de disque:

using System;
using System.Management;

public string GetFreeSpace();
{ 
   ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
   disk.Get();
   string freespace = disk["FreeSpace"];
   return freespace;
}

Il y a une myriade de façons de le faire, je vérifierais le System.Management Espace de noms pour plus de façons.

Voici un de ces sens de cette page:

public void GetDiskspace()
    {
      ConnectionOptions options = new ConnectionOptions();
      ManagementScope scope = new ManagementScope("\\\\localhost\\root\\cimv2", 
      options);
      scope.Connect();
      ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
      SelectQuery query1 = new SelectQuery("Select * from Win32_LogicalDisk");

      ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
      ManagementObjectCollection queryCollection = searcher.Get();
      ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(scope, query1);
      ManagementObjectCollection queryCollection1 = searcher1.Get();

      foreach (ManagementObject m in queryCollection)
      {
          // Display the remote computer information

          Console.WriteLine("Computer Name : {0}", m["csname"]);
          Console.WriteLine("Windows Directory : {0}", m["WindowsDirectory"]);
          Console.WriteLine("Operating System: {0}", m["Caption"]);
          Console.WriteLine("Version: {0}", m["Version"]);
          Console.WriteLine("Manufacturer : {0}", m["Manufacturer"]);
          Console.WriteLine();
      }

      foreach (ManagementObject mo in queryCollection1)
      {
          // Display Logical Disks information

         Console.WriteLine("              Disk Name : {0}", mo["Name"]);
         Console.WriteLine("              Disk Size : {0}", mo["Size"]);
         Console.WriteLine("              FreeSpace : {0}", mo["FreeSpace"]);
         Console.WriteLine("          Disk DeviceID : {0}", mo["DeviceID"]);
         Console.WriteLine("        Disk VolumeName : {0}", mo["VolumeName"]);
         Console.WriteLine("        Disk SystemName : {0}", mo["SystemName"]);
         Console.WriteLine("Disk VolumeSerialNumber : {0}", mo["VolumeSerialNumber"]);
         Console.WriteLine();
      }
      string line;
      line = Console.ReadLine(); 
    }
31
George Stocker

en utilisant ce code

 static void Main()
    {
        try
        {
            DriveInfo driveInfo = new DriveInfo(@"C:");
            long FreeSpace = driveInfo.AvailableFreeSpace;
        }
        catch (System.IO.IOException errorMesage)
        {
            Console.WriteLine(errorMesage);
        }

    }

Si vous obtenez l'erreur 'l'appareil n'est pas prêt' .Je votre appareil n'est pas prêt. Si vous essayez ce code pour un lecteur de CD sans CD, vous obtiendrez la même erreur :)

17
anishMarokey

Cela semble être une option du système.IO:

DriveInfo c = new DriveInfo("C");
long cAvailableSpace = c.AvailableFreeSpace;
9
Bryan Denny

Vous pouvez utiliser la classe driveinfo

DriveInfo[] oDrvs = DriveInfo.GetDrives();
    foreach (var Drv in oDrvs) {
        if (Drv.IsReady) {
            Console.WriteLine(Drv.Name + " " + Drv.AvailableFreeSpace.ToString);
        }
}
6
Jason Irwin

Vous pouvez utiliser WMI, voir cette question connexe:

meilleur moyen d'interroger l'espace disque sur le serveur distant

1
Cleiton