2012-04-17 41 views
5

Tôi có tệp txt với id khối lượng trong đó.Cách lấy thông tin ổ đĩa theo id âm lượng

tôi cần để có được lái xe thông tin (ký tự ổ đĩa, kích thước ổ đĩa, vv) từ id lượng ổ đĩa (Windows):

id khối lượng là theo định dạng sau:

\\?\Volume{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} 

Các ổ đĩa có thể là Removable/local disk

Việc truy vấn thông tin không quan trọng (có thể là tập lệnh, cpp, C#, mã java).

EDIT:

Tôi cố gắng để sử dụng DriveInfo, Win32_LogicalDisk, Win32_Volume, Win32_PnpDevices - nhưng tôi không thể tìm thấy id lạ này ... trong mọi trường hợp id có một định dạng differrent

CẬP NHẬT:

Tìm hiểu cách thực hiện.

bạn có thể liệt kê Win32_Volume như thế này:

ManagementObjectSearcher ms = new ManagementObjectSearcher("Select * from Win32_Volume");  
foreach(ManagementObject mo in ms.Get()) 
{ 
    var guid = mo["DeviceID"].ToString(); 

    if(guid == myGuid) 
     return mo["DriveLetter"]; 
} 
+0

Làm cách nào bạn nhận được id đó trong tệp txt. Kỹ sư đảo ngược nó để đạt được kết quả. –

+0

Tôi đang cố gắng theo dõi nơi "Lịch sử tệp" (tính năng mới trong windows 8) là lưu các tệp sao lưu của nó. Tôi thấy rằng tên thiết bị đích được lưu trong tệp xml, nó cũng lưu tên ổ đĩa và tên, nhưng điều này là không đủ vì các thông số này không phải là duy nhất và có thể thay đổi: somene có thể đẩy thiết bị và sau đó trong lần sau nó sẽ có một ký tự khác được gán, vv ... vì vậy tôi thấy rằng microsoft cũng tiết kiệm một cái gì đó trông giống như sau: " \\? \ Volume {XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} <\ TargetVolumePath> "là id duy nhất. – user844541

Trả lời

2

Kích thước khối lượng, v.v. thật dễ dàng. Chỉ cần sử dụng các phương pháp Win32 bình thường. Bất kỳ chức năng nào chấp nhận "C:" làm ổ đĩa cũng sẽ chấp nhận đường dẫn GUID khối lượng GUID (vì đó là những gì mà \\?\Volume{XXX} được gọi đúng).

"Ký tự ổ đĩa" hơi phức tạp hơn vì có thể có 0, 1 hoặc nhiều ký tự ổ đĩa. Bạn cần gọi số FindFirstVolumeMountPoint/FindNextVolumeMountPoint/FindVolumeMountPointClose để nhận tất cả.

+0

Bạn có thể thêm mẫu mã bằng WMI không? Tôi đã sử dụng GetVolumeNameForVolumeMountPoint và nó hoạt động, nhưng tôi không thể làm cho nó hoạt động bằng cách sử dụng wmi. – user844541

+0

Xem ví dụ tại http://msdn.microsoft.com/en-us/library/windows/desktop/aa394515(v=vs.85).aspx – MSalters

2

Hãy thử sử dụng này

System.Management.ManagementObjectSearcher ms = 
new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); 
foreach (ManagementObject mo in ms.Get()) 
{ 
    //Find by ID 
} 

Để biết chi tiết sậy này Win32_DiskDrive class

-2

Bạn có thể sử dụng DriveInfo.GetDrives Method để có được lái xe thông tin. Đây là mã mẫu từ MSDN

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

Trong khi mã này liệt kê các ổ đĩa hiện được cài đặt trên máy tính, rất tiếc nó không trả lời được câu hỏi (ví dụ, cách truy cập ổ đĩa bằng GUID), không có thuộc tính nào trong 'DriveInfo' liên quan đến GUID của ổ đĩa. – jrh

1

Có một hàm API cho việc này: GetVolumePathNamesForVolumeName

Nó trả về một mảng chấm dứt null, để cho phép nhiều điểm lắp. Nếu bạn chỉ có một điểm gắn kết (điển hình), thì bạn có thể đọc nó như là một chuỗi chấm dứt null thông thường.

Điều này hiệu quả hơn khi liệt kê đĩa/ổ đĩa, điều này có thể khiến đĩa không hoạt động quay lên.

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