检查驱动器是否存在(字符串路径)

时间:2013-06-27 05:20:06

标签: c# wpf

如何从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"

8 个答案:

答案 0 :(得分:28)

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

当然,应该添加额外的健全性检查(路径根目录中至少有三个字符,第二个是冒号),但这将留给读者作为练习。

答案 1 :(得分:5)

你可以关注

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

这是因为Environment.SystemDirectory.XXXXX是关于安装系统/窗口的地方......不适用于整个高清。

为此你可以使用.....

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

我想这取决于你希望完成的具体内容。如果您尝试遍历驱动器并进行测试以确保每个驱动器都存在,那么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?
}

答案 7 :(得分:0)

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

DriveInfo.GetDrives().Any(d => d.Name.ToUpper()[0] == 'E');