В чем разница между различными методами GetLogicalDrives и какой из них лучше использовать

#c#

#c#

Вопрос:

Я пытался получить имя или букву жесткого диска, но все еще запутался, потому что здесь есть несколько функций, которые можно использовать. в чем разница между тремя приведенными ниже кодами для получения буквы жесткого диска? и какой из них лучше использовать?

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

Результат : получаем букву жесткого диска

Ответ №1:

Все они вызывают этот код, который является просто оболочкой для Win32 API функции GetLogicalDrives

 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 amp; 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 amp; 1) != 0)
   {
      result[count  ] = new String(root);
   }
   d >>= 1;
   root[0]  ;
}
return resu<
  

За исключением того, что 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;
  

Итак, ответ таков: заметной разницы нет


Ссылки

Ответ №2:

Документация бы предполагала, что эти три метода предоставляют одну и ту же информацию. Только DriveInfo.GetDrives(), казалось бы, предполагает, что предоставляется больше информации, но если вам нужно знать только фактические буквы, то первых двух более чем достаточно.