从C#应用程序打开txt文件

时间:2009-01-07 14:29:23

标签: c# command-line cmd environment-variables notepad

以下代码假设从我的C#应用​​程序打开CMD并打开文件text.txt。

我尝试将文件路径设置为环境变量,但是当记事本打开时,它会查找%file%.txt而不是text.txt

知道为什么吗?

System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.EnableRaisingEvents=false;
        proc.StartInfo.EnvironmentVariables.Add("file", "c:\\text.txt");
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.FileName = "notepad";

        proc.StartInfo.Arguments="%file%";
        proc.Start();
        proc.WaitForExit();

        Console.WriteLine(proc.ExitCode);

8 个答案:

答案 0 :(得分:10)

如果您的目的是使用.txt文件启动编辑器(如问题标题所示),请使用:

Process.Start("C:\\text.txt")

答案 1 :(得分:3)

简短版本是我怀疑你必须更直接地传递arg,即

 proc.StartInfo.Arguments = @"""c:\text.txt""";

虽然您可以设置环境变量(在过程中使用),但我认为您不能在流程开始时使用它们。

答案 2 :(得分:2)

你想用%file%完成什么? notepad.exe的命令行参数是您要打开的文件。你需要做这样的事情:

proc.StartInfo.Arguments = "c:\\text.txt";

答案 3 :(得分:1)

一个明显的问题是你有UseShellExecute设置为false。这意味着您直接执行记事本而不通过命令shell cmd.exe。因此环境变量没有被扩展。

我不确定您要实现的目标(为什么需要添加环境变量?)但以下内容可行:

    System.Diagnostics.Process proc = 
        new System.Diagnostics.Process(); 
    proc.EnableRaisingEvents = false; 
    proc.StartInfo.EnvironmentVariables.Add("file", "c:\\text.txt"); 
    proc.StartInfo.UseShellExecute = false; 
    proc.StartInfo.FileName = "cmd.exe";
    proc.StartInfo.Arguments = "/c notepad %file%"; 
    proc.Start(); 
    proc.WaitForExit(); 

答案 4 :(得分:1)

设置UseShellExecute = true

这样它应该使用cmd.exe处理器来扩展%file%变量

答案 5 :(得分:0)

试试这个:

proc.StartInfo.Arguments = System.Environment.GetEnvironmentVariable("file");

答案 6 :(得分:0)

也许它与StartInfo.Arguments的工作方式有关。如果你找不到更好的东西,这对我有用:

proc.StartInfo.FileName = "cmd";
proc.StartInfo.Arguments="/c notepad %my_file%";

答案 7 :(得分:0)

我愿意打赌你需要设置 WorkingDirectory 才能让它发挥作用。 NOTEPAD.exe 通常位于%SYSTEMROOT%(C:\ windows)中,但默认值为%SYSTEMROOT%\ system32 。试试下面的内容。

System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.EnableRaisingEvents=false;
        proc.StartInfo.WorkingDirectory = "%SYSTEMROOT%";
        proc.StartInfo.EnvironmentVariables.Add("file", "c:\\text.txt");
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.FileName = "notepad";

        proc.StartInfo.Arguments="%file%";
        proc.Start();
        proc.WaitForExit();

        Console.WriteLine(proc.ExitCode);