Проверить наличие диска (строка)

Как проверить, что диск существует в системе из данной строки в WPF. Я пробовал следующие

Пример: FileLocation.Text = "K:\TestDrive\XXX";

if (!Directory.Exists(FileLocation.Text))
{
         MessageBox.Show("Invalid Directory", "Error", MessageBoxButton.OK);
         return;
}

Он проверяет полный путь, но it should check "K:\" from the text. Не могли бы вы посоветовать мне

EDIT 1: " K:\TestDrive\XXX" не является статическим

РЕДАКТИРОВАТЬ 2: Я попробовал следующее: в моей системе у меня есть 3 drives C, D and E, но он показывает false.

Environment.SystemDirectory.Contains("D").ToString(); = "False"

Ответ 1

string drive = Path.GetPathRoot(FileLocation.Text);   // e.g. K:\

if (!Directory.Exists(drive))
{
     MessageBox.Show("Drive " + drive + " not found or inaccessible", 
                     "Error", MessageBoxButton.OK);
     return;
}

Конечно, дополнительные проверки здравомыслия (имеет ли корень пути как минимум три символа, второй - двоеточие), но это будет оставлено как упражнение для читателя.

Ответ 2

вы можете попробовать это....

MessageBox.Show(Environment.SystemDirectory.Contains("D").ToString());

Ответ 3

вы можете следовать

bool isDriveExists(string driveLetterWithColonAndSlash)
{
    return DriveInfo.GetDrives().Any(x => x.Name == driveLetterWithColonAndSlash);
}

Ответ 4

Это потому, что Environment.SystemDirectory.XXXXX - это все, где установлена ​​система/окна...... не для всего HD.

для этого вы можете использовать.....

    foreach (var item in System.IO.DriveInfo.GetDrives())
    {
        MessageBox.Show(item.ToString());
    }

он отобразит все диски, включая прикрепленные USB-устройства.....

Ответ 5

Вы можете проверить диски на С#, как этот

   foreach (var drive in DriveInfo.GetDrives())
   {
       //Code goes here
   }

Ответ 6

Вы можете использовать Environment.GetLogicalDrives() для получения string[] логических дисков в вашей системе.

var drive = Path.GetPathRoot(FileLocation.Text);
if (Environment.GetLogicalDrives().Contains(drive, StringComparer.InvariantCultureIgnoreCase))
{
         MessageBox.Show("Invalid Directory", "Error", MessageBoxButton.OK);
         return;
}

Ответ 7

Я полагаю, это зависит от того, что именно вы надеетесь достичь. Если вы пытаетесь выполнить итерацию с помощью дисков и протестировать, чтобы убедиться, что каждый накопитель существует, то подходит Environment.GetLogicalDrives() или DriveInfo.GetDrives(), поскольку он позволяет выполнять итерацию через диски.

Однако, если все, о чем вы заботитесь, это тестирование, чтобы увидеть, существует ли ОДИН диск для определенного пути, получение всего списка дисков для проверки того, содержит ли он, немного назад. Вы бы хотели использовать Directory.Exists(), поскольку он просто проверяет, существует ли этот единственный путь.

bool DriveExists(string fileLocation) {
    string drive = Path.GetPathRoot(fileLocation); // To ensure we are just testing the root directory.

    return Directory.Exists(drive); // Does the path exist?
}