各种GetLogicalDrives方法之间有什么区别,哪种方法更好用

时间:2019-03-08 08:33:06

标签: c#

我试图获取硬盘驱动器的名称或字母,但是仍然很困惑,因为这里有几个可以使用的功能。 下面的三个代码获得硬盘驱动器号有什么区别?哪个更好用?

Directory.GetLogicalDrives()
Environment.GetLogicalDrives()
DriveInfo.GetDrives()

结果:get hard drive letter

2 个答案:

答案 0 :(得分:3)

他们都调用此代码,这只是 Win32 API GetLogicalDrives function

的包装
new EnvironmentPermission(PermissionState.Unrestricted).Demand();

int drives = Win32Native.GetLogicalDrives();
if (drives == 0)
   __Error.WinIOError();
uint d = (uint)drives;
int count = 0;
while (d != 0)
{
   if (((int)d & 1) != 0) count++;
   d >>= 1;
}
String[] result = new String[count];
char[] root = new char[] { 'A', ':', '\\' };
d = (uint)drives;
count = 0;
while (d != 0)
{
   if (((int)d & 1) != 0)
   {
      result[count++] = new String(root);
   }
   d >>= 1;
   root[0]++;
}
return result;

除了GetDrives将结果传递到DriveInfo类之外

// Directory.GetLogicalDrives demands unmanaged code permission
String[] drives = Directory.GetLogicalDrives();
DriveInfo[] di = new DriveInfo[drives.Length];
for(int i=0; i<drives.Length; i++)
     di[i] = new DriveInfo(drives[i]);
return di;

答案是,没有明显的差异


参考

答案 1 :(得分:0)

documentation would suggest这三种方法提供了相同的信息。似乎只有DriveInfo.GetDrives()会建议您提供更多的信息,但是如果您只需要知道实际的字母,那么前两个字母就足够了。