我看到了另一个主题,但我遇到了其他问题。进程已经启动(在任务管理器中看到),但是文件夹并没有在我的屏幕上打开。出了什么问题?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
我看到了另一个主题,但我遇到了其他问题。进程已经启动(在任务管理器中看到),但是文件夹并没有在我的屏幕上打开。出了什么问题?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
您确定文件夹 "c:\teste
" 存在吗?如果不存在,Windows资源管理器将会打开显示一些默认文件夹(在我的情况下是 "C:\Users\[user name]\Documents
")。
更新
我已经尝试了以下变化:
// opens the folder in explorer
Process.Start(@"c:\temp");
// opens the folder in explorer
Process.Start("explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens explorer, showing some other folder)
Process.Start("explorer.exe", @"c:\does_not_exist");
如果这些方法(除了抛出异常的那个)都不能在你的电脑上正常工作,我认为问题不在代码中,而是环境出了问题。如果是这种情况,我建议尝试以下一项或两项:
Process.Start(path)
会激活该窗口(可能只是在任务栏中闪烁,而不是置于前台);而使用 explorer.exe
+参数则总是在前台打开一个新窗口(但可能会多次打开同一个窗口)。因此,两者都有缺点。 - KekuSemauProcess.Start(@"c:\temp")
使用时必须小心。如果存在 c:\temp.com
,则函数调用将打开 c:\temp.com
而不是 c:\temp
。详见 https://forums.iis.net/p/1239773/2144186.aspx 获取更多详情。 - Lex LiProcess.Start(@"c:\temp")
可能会打开不同的文件夹,例如 C:\temp.exe
或 C:\temp.cmd
。请参见此问题,其中 VS 本身表现出有缺陷的行为。您可以通过使用 explorer.exe
变体或(在我看来更好)始终附加 Path.DirectorySeparatorChar
来避免这种情况。例如,Process.Start(@"C:\temp\")
。 - binkiProcessStartInfo
并设置UseShellExecute = true
。 - Walt D仅供完整性考虑,如果你想做的只是打开一个文件夹,可以使用以下方法:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
确保FileName以Path.DirectorySeparatorChar
结尾,这样它就可以明确地指向一个文件夹。(感谢@ binki。)
这个解决方案不能用于打开文件夹并选择其中的项目,因为似乎没有对应的动词。
C:\teste.exe
或 C:\teste.cmd
这样的文件夹,资源管理器将会打开那个你没有预期的其他文件夹。为了避免这种情况,你可以在路径末尾加上一个 Path.DirectorySeparatorChar
。查看Visual Studio自身也犯同样错误的例子。 - binkiVerb =“select”
,但遗憾的是你不能。无论如何,非常好的答案! - idbriiVerb =“open”
是不必要的。(在Windows中测试,其他操作系统可能有所不同。) - Walt D如果您想选择文件或文件夹,可以使用以下方法:
Process.Start("explorer.exe", "/select, c:\\teste");
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start()
的一个重载函数。这很简单!explorer.exe
),系统会将其识别为有效的文件夹路径,并尝试将其附加到已经运行的Explorer进程。在这种情况下,如果文件夹已经打开,Explorer将不会执行任何操作。System.IO.Directory.Exists()
应该足以确保。Path.DirectorySeparatorChar
。否则,如果同名文件夹同时存在.cmd
、.exe
或其他后缀的文件,资源管理器将会打开那个文件夹,或者如果这些实际上是可执行文件或脚本,则运行它们而不是打开您预期的文件夹。 - binki你在转义反斜杠,而@符号本来就可以帮你做到这一点。
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");