为什么我用Interaction.Shell方法找不到文件
本文关键字:方法 找不到 文件 Shell Interaction 为什么 | 更新日期: 2023-09-27 18:20:34
我想使用VisualBasic.Interaction.Shell
方法打开一个记事本文件。目前我使用以下代码得到了一个未找到文件的异常。
int pid = Interaction.Shell(@"D:'abc.txt", AppWinStyle.NormalNoFocus, false, -1);
但这是有效的:
int pid = Interaction.Shell(@"notepad.exe", AppWinStyle.NormalNoFocus, false, -1);
它只是打开一个记事本文件。为什么会这样?
我确实需要它来打开特定位置的文件。我认为Interaction.Shell执行有一些优势。如何使用Interaction.Shell在特定位置打开文件?
看起来Interaction.Shell
无法通过关联文档打开应用程序。(a) 相关的MSDN页面没有这么说(尽管PathName
参数的示例当时似乎拼写错误)和(b)即使D:'abc.txt
确实存在,它也会失败。
或者,您可以使用System.Diagnostics.Process
类:
using (Process process = Process.Start(@"D:'abc.txt"))
{
int pid = process.Id;
// Whether you want for it to exit, depends on your needs. Your
// Interaction.Shell() call above suggests you don't. But then
// you need to be aware that "pid" might not be valid when you
// you look at it, because the process may already be gone.
// A problem that would also arise with Interaction.Shell.
// process.WaitForExit();
}
请注意,D:'abc.txt
必须存在,否则您仍然会得到一个FileNotFoundException
。
更新如果您确实需要使用Interaction.Shell
,您可以使用以下
int pid = Interaction.Shell(@"notepad.exe D:'abc.txt", false, -1);
就我个人而言,我会选择Process
类,因为它通常提供对已启动进程的更健壮的处理。在这种情况下,它还使您不必"知道"哪个程序与.txt
文件相关(除非您总是想使用notepad.exe
)。