[英]C# Open a .txt file for viewing while application has it open and is writing to it
[英]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.