2009-11-03 40 views
5

Tôi muốn lấy danh sách các đĩa cố định trong một hệ thống. Nhưng C# s GetDrives Ổ đĩa cố định bao gồm cắm USB ổ cứng.C# getdrives với loại cố định nhưng không có ổ cứng USB?

Bất kỳ ý tưởng nào về cách tôi có thể phát hiện thấy một Ổ đĩa cố định không phải là ổ cứng USB hoặc vica versa?

+0

xin lỗi nhưng internet đã ngừng hoạt động, hãy kiểm tra liên kết bên dưới ... –

Trả lời

3

sử dụng DriveType để phát hiện các loại ổ đĩa:

using System.IO; 

DriveInfo[] allDrives = DriveInfo.GetDrives(); 
foreach (DriveInfo d in allDrives) 
{ 
    if (d.IsReady && d.DriveType == DriveType.Fixed) 
    { 
    // This is the drive you want... 
    } 
} 

DriveInfo Class

EDIT1:

kiểm tra liên kết sau: How do I detected whether a hard drive is connected via USB?

+0

Nhưng DriveType.Removable chỉ là USB Sticks không phải USB Harddisk. Từ Docu: Ổ đĩa là thiết bị lưu trữ di động, chẳng hạn như ổ đĩa mềm hoặc ổ flash USB. – Ephraim

+0

Ổ đĩa cứng USB thuộc loại Cố định chính xác đó là sự cố! – Ephraim

+0

Có thể. Bạn có thể kiểm tra giải pháp của tôi ở phía dưới. – Parsa

4

Giải pháp nicked từ How to get serial number of USB-Stick in C#:

//import the System.Management namespace at the top in your "using" statement. 
ManagementObjectSearch theSearcher = new ManagementObjectSearcher(
     "SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'"); 
+1

Đúng, mặc dù điều này sẽ liệt kê Sticks và Drives, và một cái nhìn nhanh chóng thông qua các thuộc tính đã không tiết lộ một cách dễ dàng để tìm thư Drive. –

+0

Rõ ràng ephraim đã có những thứ đó. Giải pháp này nhằm mục đích thể hiện cách bạn lọc ra các ổ USB. Đó là lý do tại sao truy vấn được viết dưới dạng 'InterfaceType = 'USB'', và tại sao nó lại không quan trọng là các thanh được bao gồm. – MSalters

+0

Không có cách nào để khớp đối tượng ManagementObjects và các đối tượng DriveInfo vì truy vấn không trả về ký tự ổ đĩa. – Wouter

1

Ở đây bạn có thể nhận được danh sách các ổ cứng USB.

//Add Reference System.Management and use namespace at the top of the code. 
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'"); 

     foreach (ManagementObject queryObj in searcher.Get()) 
     { 
      foreach (ManagementObject b in queryObj.GetRelated("Win32_DiskPartition")) 
      { 
       foreach (ManagementBaseObject c in b.GetRelated("Win32_LogicalDisk")) 
       { 
        Console.WriteLine(String.Format("{0}" + "\\", c["Name"].ToString())); // here it will print USB drive letter 
       } 
      } 

     } 

Ở đây bạn có thể nhận được danh sách tất cả các ổ đĩa cố định (hệ thống và USB ổ đĩa cứng):

 DriveInfo[] allDrives = DriveInfo.GetDrives(); 

     foreach (DriveInfo d in allDrives) 
     { 
      if (d.IsReady == true && d.DriveType == DriveType.Fixed) 
      { 
       Console.WriteLine("Drive {0}", d.Name); 
       Console.WriteLine(" Drive type: {0}", d.DriveType); 
      }   
     } 

Nếu bạn so sánh chúng, sau đó bạn có thể lấy danh sách các ổ đĩa cố định trong một hệ thống nhưng không có Ổ cứng USB.

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