如何从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"
答案 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');