2009-09-11 34 views
21

Tôi cần một cách để kiểm tra không gian đĩa sẵn có trên máy chủ Windows từ xa trước khi sao chép tệp vào máy chủ đó. Sử dụng phương pháp này tôi có thể kiểm tra xem máy chủ chính có đầy đủ không và nếu có, thì tôi sẽ sao chép các tệp này sang máy chủ phụ.Làm cách nào tôi có thể kiểm tra dung lượng đĩa sẵn có?

Làm cách nào tôi có thể kiểm tra dung lượng ổ đĩa khả dụng bằng C#/ASP.net 2.0?

+0

Trùng lặp: http://stackoverflow.com/questions/56715/best-way-to-query-disk-space- trên máy chủ từ xa –

Trả lời

30

Bạn có thể kiểm tra nó bằng cách làm như sau:

Thêm System.Management.dll như một tài liệu tham khảo để dự án của bạn.

Sử dụng đoạn mã sau để có được những diskspace:

using System; 
using System.Management; 

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

Có vô số cách để làm điều đó, tôi muốn kiểm tra không gian tên System.Management cách hơn.

Dưới đây là một trong những cách như vậy từ trang đó:

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

Tính năng này hoạt động đối với máy đang thực thi mã, nhưng máy chủ từ xa thì sao? –

+0

Liên kết tôi đã gửi cho bạn để có thể cho bạn biết cách thực hiện; Tôi đã không làm điều đó; nhưng tôi có thể đăng mã bạn sử dụng để truy vấn máy chủ. –

+0

Ah okay, tôi đã bỏ lỡ ManagementScope, điều này sẽ làm việc cho tôi sau đó. Tôi sẽ thử nó –

5

Bạn có thể sử dụng lớp DriveInfo

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

Điều này phù hợp với máy đang thực thi mã, nhưng còn máy chủ từ xa thì sao? –

+0

Bạn có thể ánh xạ ổ đĩa mạng, nhưng có thể hơi phức tạp khi lập trình –

8

Đây dường như là một tùy chọn từ System.IO:

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

bằng cách sử dụng mã này

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

    } 

NẾU bạn gặp lỗi 'Thiết bị chưa sẵn sàng' .i.e thiết bị của bạn chưa sẵn sàng. Nếu bạn đang thử mã này cho một ổ đĩa CD mà không có đĩa CD, bạn sẽ nhận được cùng một lỗi:)

+3

hoặc bạn chỉ có thể sử dụng driveInfo.IsReady để kiểm tra xem ổ đĩa đã sẵn sàng hay chưa. –

Các vấn đề liên quan