2009-09-11 97 views
21

我需要一种方法来检查在将文件复制到该服务器之前,在远程 Windows服务器上检查可用磁盘空间。使用这种方法,我可以检查主服务器是否已满,如果是,那么我会将这些文件复制到辅助服务器。如何检查可用磁盘空间?

如何使用C#/ ASP.net 2.0检查可用磁盘空间?

+0

Duplicate:http://stackoverflow.com/questions/56715/best-way-to-query-disk-space- on-remote-server – 2009-09-11 18:25:40

回答

30

您可以通过执行以下检查:

添加System.Management.dll为你的项目的引用。

使用下面的代码来获取磁盘空间:

using System; 
using System.Management; 

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

有方法可以做到这万千,我会检查System.Management命名空间更多的途径。

下面是该页面一个这样的方式:

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

这适用于执行代码的机器,但对于远程服务器呢? – 2009-09-11 18:17:30

+0

我寄给你的链接可以告诉你如何;我没有做到;但我可以发布你用来查询服务器的代码。 – 2009-09-11 18:28:40

+0

啊好吧,我错过了ManagementScope,这应该适合我。我会试一试 – 2009-09-11 18:33:45

5

可以使用DriveInfo类

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

这适用于执行代码的机器,但对于远程服务器呢? – 2009-09-11 18:16:57

+0

您可以映射网络驱动器,但编程方式可能会有点复杂 – 2009-09-11 20:16:21

8

这似乎是从System.IO一个选项:

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

使用此代码

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

    } 

如果您收到错误'设备未准备好'.i.e您的设备尚未准备好。 如果您尝试此代码为没有CD的CD驱动器,您将得到相同的错误:)

+3

或者您可以使用driveInfo.IsReady检查驱动器是否准备就绪。 – 2014-05-21 06:10:41