19

如何从 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. 你能指导我吗

编辑 1:K:\TestDrive\XXX ”不是静态的

编辑 2:我在我的系统中尝试了以下操作,3 drives C, D and E但它显示为false

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

8 回答 8

38
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;
}

当然,应该添加额外的完整性检查(路径根是否至少包含三个字符,第二个是冒号),但这将留给读者作为练习。

于 2013-06-27T05:33:53.570 回答
8

你可以关注

bool isDriveExists(string driveLetterWithColonAndSlash)
{
    return DriveInfo.GetDrives().Any(x => x.Name == driveLetterWithColonAndSlash);
}
于 2013-06-27T05:23:57.707 回答
2

这是因为 Environment.SystemDirectory.XXXXX 是关于系统/Windows 的安装位置......而不是整个高清。

为此,您可以使用.....

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

它将显示所有驱动器,包括连接的 USB .....

于 2013-06-27T05:58:20.317 回答
2

您可以使用Environment.GetLogicalDrives()来获取系统中的一个string[]逻辑驱动器。

var drive = Path.GetPathRoot(FileLocation.Text);
if (Environment.GetLogicalDrives().Contains(drive, StringComparer.InvariantCultureIgnoreCase))
{
         MessageBox.Show("Invalid Directory", "Error", MessageBoxButton.OK);
         return;
}
于 2016-05-30T20:46:31.123 回答
1

你可以试试这个......

MessageBox.Show(Environment.SystemDirectory.Contains("D").ToString());
于 2013-06-27T05:24:51.033 回答
1

我想这取决于你到底希望完成什么。如果您尝试遍历驱动器并进行测试以确保每个驱动器都存在,那么Environment.GetLogicalDrives()orDriveInfo.GetDrives()是合适的,因为它允许您遍历驱动器。

但是,如果您只关心测试以查看特定路径是否存在 ONE 驱动器,那么获取整个驱动器列表以检查它是否被包含有点倒退。您可能希望使用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?
}
于 2017-07-11T18:54:44.130 回答
0

您可以像这样在 C# 中检查驱动器

   foreach (var drive in DriveInfo.GetDrives())
   {
       //Code goes here
   }
于 2013-06-27T05:22:48.127 回答
0

如果任何驱动器的字母是 E,这将得到。您可以将其更改为任何其他字母。

DriveInfo.GetDrives().Any(d => d.Name.ToUpper()[0] == 'E');
于 2019-12-27T03:50:56.247 回答