繁体   English   中英

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

[英]Open txt file from C# application

以下代码假设从我的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);

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

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

简短的版本是我怀疑你将不得不更直接地传递arg,即

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

虽然您可以设置环境变量( 流程中使用),但我认为您不能在流程启动期间使用它们。

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

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

一个明显的问题是你有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(); 

设置UseShellExecute = true

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

尝试这个:

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

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

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

我愿意打赌你需要设置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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM