我们想使用brill tagger,这样在单击按钮时,它会将Input.txt标记为output.txt。所以我们创建了一个新的visual studio项目并放了一个按钮。在按钮单击事件上,我们编写了以下代码。没有错误,我们可以看到命令提示符被调用。但是没有创建输出文件。代码如下。你能指导我们吗?
private void button1_Click(object sender, EventArgs e)
{
ProcessStartInfo brillStartInfo = new ProcessStartInfo(@"C:\Users\toshal\Documents\Visual Studio 2008\Projects\brill tagger\bin\brill.exe");
brillStartInfo.Arguments = "/C brill.exe LEXICON.BROWN Input.txt BIGRAMS LEXICALRULEFILE.BROWN CONTEXTUALRULEFILE.BROWN > output.txt";
brillStartInfo.UseShellExecute = false;
brillStartInfo.RedirectStandardOutput = true;
brillStartInfo.RedirectStandardError = true;
brillStartInfo.CreateNoWindow = false;
Process brill = new Process();
brill.StartInfo = brillStartInfo;
brill.Start();
string output = brill.StandardOutput.ReadToEnd();
brill.WaitForExit();
}
答案 0 :(得分:0)
IMO创建了文件,而不是在您期望的目录中。原因是,您启动默认WorkingDirectory为C:\Windows\system32
的cmd,只需输入输出文件的完整路径,并应该工作或设置process.WorkingDirectory
属性。
此外,您希望将程序的输出重定向到C#应用程序,不应该在命令行中重定向它。
您可以将输出重定向到> "outputpath"
的文件,或者将输出重定向到C#app然后删除>output
,两者都无法完成。
答案 1 :(得分:0)
他们编写代码的方式,我认为它应该是这样的:
private void button1_Click(object sender, EventArgs e)
{
ProcessStartInfo brillStartInfo = new ProcessStartInfo("cmd");
brillStartInfo.Arguments = "/C brill.exe LEXICON.BROWN Input.txt BIGRAMS LEXICALRULEFILE.BROWN CONTEXTUALRULEFILE.BROWN > output.txt";
brillStartInfo.WorkingDirectory = @"C:\Users\toshal\Documents\Visual Studio 2008\Projects\brill tagger\bin\";
brillStartInfo.UseShellExecute = false;
brillStartInfo.CreateNoWindow = false;
Process brill = new Process();
brill.StartInfo = brillStartInfo;
brill.Start();
brill.WaitForExit();
}
重要更改:要执行的可执行文件是cmd
,您需要将工作目录设置为brill.exe目录,以便能够在参数中使用它而不指定路径。
答案 2 :(得分:0)
程序的输出被重定向到文件output.txt
。如果让程序生成输出到控制台,则string output = brill.StandardOutput.ReadToEnd();
将返回标记结果。否则,您必须明确打开并阅读该文件。