我试图编写代码来检测USB驱动器并检查每个目录中的.exe文件。我成功地做到了这一点,但现在我想运行该exe文件。我无法做到这一点。为什么这段代码不起作用?
private void Form1_Load(object sender, EventArgs e)
{
listremovable();
}
private void listremovable()
{
foreach (DriveInfo d in DriveInfo.GetDrives())
{
if (d.IsReady && d.DriveType == DriveType.Removable)
listBox1.Items.Add(d);
}
MessageBox.Show(drive.ToString());
if (listBox1.Items.Count < 1)
{
MessageBox.Show("no usb");
}
}
public void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
listBox2.Items.Clear();
try
{
DriveInfo drive = (DriveInfo)listBox1.SelectedItem;
foreach (DirectoryInfo dirinfo in drive.RootDirectory.GetDirectories())
foreach (var file in dirinfo.GetFiles())
if (file.Extension == ".exe")
listBox2.Items.Add(file);
//MessageBox.Show(drive);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
string pro = listBox2.SelectedItem.ToString();
//string hel = Directory.GetDirectories
MessageBox.Show(pro);
//System.Diagnostics.Process.Start(pro);
}
答案 0 :(得分:7)
foreach (DirectoryInfo dirinfo in drive.RootDirectory.GetDirectories())
foreach (var file in dirinfo.GetFiles())
if (file.Extension == ".exe")
listBox2.Items.Add(file);
好的,在这里您使用dirInfo
DirectoryInfo
的实例,并在其上调用GetFiles()
。 GetFiles()
返回FileInfo
个对象的数组。然后,您浏览该数组,如果您喜欢所看到的内容,则将这些FileInfo
对象添加到列表中。到目前为止一切都很好。
string pro = listBox2.SelectedItem.ToString();
//string hel = Directory.GetDirectories
MessageBox.Show(pro);
//System.Diagnostics.Process.Start(pro);
这是没有调试器的调试的沮丧结果,但看起来你试图这样做:
string pro = listBox2.SelectedItem.ToString();
System.Diagnostics.Process.Start(pro);
这是有道理的,但它显然不起作用。您从列表中获得的内容,前面提到的FileInfo
和Process.Start
期望的内容(文件或应用程序的路径)之间存在不匹配。你试过了,后一种方法引起了疯狂的抱怨。
这是你想做的事情:
// get your FileInfo object
// (SelectedItem gives you a plain object, but we know it's a FileInfo
// cause that's what you gave it before, so we cast it)
FileInfo fi = (FileInfo)listBox2.SelectedItem;
// grab a path to the file out of the object
string path = fi.FullName;
// pass that path to the Start method
System.Diagnostics.Process.Start(path);
有些事情可以帮到你们这里及以后:
DirectoryInfo.GetFiles
产生的内容以及Process.Start
所期望的内容。