2009-09-11 12 views
21

Ich brauche eine Möglichkeit, um verfügbaren Speicherplatz auf einem remote Windows-Server zu überprüfen, bevor Sie Dateien auf diesen Server kopieren. Mit dieser Methode kann ich überprüfen, ob der primäre Server voll ist und wenn dies der Fall ist, werde ich die Dateien auf einen sekundären Server kopieren.Wie kann ich nach verfügbarem Speicherplatz suchen?

Wie kann ich mit C#/ASP.net 2.0 nach verfügbarem Speicherplatz suchen?

+0

Duplizieren: http://stackoverflow.com/questions/56715/best-way-to-query-disk-space- On-Remote-Server –

Antwort

30

Sie können es, indem Sie die folgenden Aktionen ausführen:

die System.Management.dll als Verweis auf Ihr Projekt hinzufügen.

Verwenden Sie den folgenden Code, um den Speicherplatz zu erhalten:

using System; 
using System.Management; 

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

Es gibt eine Vielzahl von Möglichkeiten, es zu tun, würde ich überprüfen Sie die System.Management Namespace für mehr Möglichkeiten.

Hier ist eine solche Art und Weise von dieser Seite:

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(); 
    } 
+0

Dies funktioniert für die Maschine, die den Code ausführt, aber was ist mit einem Remote-Server? –

+0

Der Link, an den ich Ihnen geschickt habe, kann Ihnen sagen, wie; Ich habe es nicht getan; aber ich kann den Code posten, den Sie verwenden würden, um den Server abzufragen. –

+0

Ah okay, ich habe das ManagementScope verpasst, das sollte dann für mich funktionieren. Ich werde es versuchen –

5

können Sie die Verwendung Driveinfo-Klasse

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

Dies funktioniert für die Maschine, die den Code ausführt, aber was ist mit einem Remote-Server? –

+0

Sie könnten ein Netzlaufwerk zuordnen, aber es kann ein wenig kompliziert sein, programmgesteuert –

8

Dies ist eine Option aus dem System.IO zu sein scheint:

DriveInfo c = new DriveInfo("C"); 
long cAvailableSpace = c.AvailableFreeSpace; 
16

mit diesem Code

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

    } 

Wenn Sie den Fehler 'erhalten Das Gerät ist nicht bereit' .ie Ihr Gerät ist nicht bereit. Wenn Sie diesen Code für ein CD-Laufwerk ohne CD versuchen, erhalten Sie den gleichen Fehler:)

+3

zu tun, oder Sie können einfach driveInfo.IsReady verwenden, um zu überprüfen, ob ein Laufwerk bereit ist oder nicht. –

Verwandte Themen