File.Open()与PATH环境变量

时间:2012-09-18 07:23:10

标签: c# .net

我正在编写一个CLI程序,在一个事件上,在用户定义的文件上运行Process.Start()。这尊重%PATH%,但File.Open()没有。

基本上,当程序启动时,我会进行各种检查。我想要的一个检查是该文件存在并且可以由当前用户打开,ala:

try
{
    fs = File.Open(Run, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    Run = args[++i];
}
catch(TheVariousExceptions){ .... }
finally
{
    if(fs != null)
        fs.Close();
}

异常也在Process.Start()时处理,但是直到用户可能已配置程序并使其运行一段时间后才会调用。所以我想首先像上面那样运行支票。问题是,它不会考虑%PATH%

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我认为你必须手动完成。

您可以使用Environment.GetEnvironmentVariable来检索PATH。然后,将其拆分为;,并将结果保存在List中。然后,您必须使用文件名Combine每个路径,并对生成的每个组合执行File.Open检查。

你确定值得做这些检查吗?

答案 1 :(得分:0)

这就是我设法做到的。

static Process TestProc = new Process();
static ProcessStartInfo TestProcStart = new ProcessStartInfo();
try
{
    TestProcStart.WindowStyle = ProcessWindowStyle.Hidden;
    TestProcStart.FileName = args[++i];
    TestProc.StartInfo = TestProcStart;
    TestProc.Start();
    TestProc.Kill();
    Run = args[i];
}
catch(Win32Exception e)
{
    switch(e.NativeErrorCode)
    {
        case 2: Console.WriteLine("ERROR: File " + args[i] + " not found!"); return;
        case 5: Console.WriteLine("ERROR: Access denied to " + args[i] + "!"); return;
        default: Console.WriteLine("ERROR " + e.NativeErrorCode + ": " + e.Message); return;
    }
}