【发布时间】:2010-10-04 14:01:16
【问题描述】:
如果我使用ShellExecute(或在.net 中使用System.Diagnostics.Process.Start())运行进程,则启动的文件名进程不需要是完整路径。
如果我想启动记事本,我可以使用
Process.Start("notepad.exe");
而不是
Process.Start(@"c:\windows\system32\notepad.exe");
因为目录 c:\windows\system32 是 PATH 环境变量的一部分。
如何在不执行进程且不解析 PATH 变量的情况下检查 PATH 上是否存在文件?
System.IO.File.Exists("notepad.exe"); // returns false
(new System.IO.FileInfo("notepad.exe")).Exists; // returns false
但我需要这样的东西:
System.IO.File.ExistsOnPath("notepad.exe"); // should return true
和
System.IO.File.GetFullPath("notepad.exe"); // (like unix which cmd) should return
// c:\windows\system32\notepad.exe
BCL 中是否有预定义的类来执行此任务?
【问题讨论】:
-
虽然这样一个预定义的类会很方便(或者很方便,如果它存在的话)是不是只需要多一行来获取路径然后检查存在()?你可以比问问题更快地写出来。特殊原因/需要?只是想知道。
-
是的,应该很容易。但我的信念是,如果可以使用现有的编程语言库完成一项任务,我更喜欢这种方式,而不是一次又一次地重新发明轮子。如果没有可用的东西,我自己做。
-
@MickeyfAgain_BeforeExitOfSO 解析
PATH是特定于平台的(例如,/vs\用于子目录,:vs;用于条目分隔符),以及希望始终处理模棱两可的结果 - 所以它不像“获取路径然后检查存在()”那么简单。此外,如果有几十个或要检查的路径,或者如果有任何是远程/网络路径,那么例如检查程序代码而不是具有预缓存结果的操作系统可能会对性能产生重大影响。等等等等。