我正在研究一个程序,该程序运行带有多个(大文本)参数的另一个应用程序。 当我通过cmd.exe运行此外部应用程序时,一切正常(也可以使用多行文字作为参数)。
ttv.exe -I <root directory> -v vMale -i "large large text" -o test.pcm
但是当我尝试从程序中调用它时,我发现“大号大文本”参数对于此调用而言太大,因为字符串限制为254个字符?!?
这部分代码调用了该过程:
string path = @"<path to exe>";
string arg1= @"-I <root directory>";
string arg2= @"-v vMale";
string arg3= @"-o test.pcm";
string arg4= @"-i """+ text+"";
commandline.StartInfo.UseShellExecute = false;
commandline.StartInfo.RedirectStandardInput = true;
commandline.StartInfo.WorkingDirectory = path;
commandline.StartInfo.FileName = Path.Combine(path, "ttv.exe");
commandline.StartInfo.Arguments = " " + arg1+ " " + arg2+ " " + arg3+ " " + arg4;
commandline.Start();
我尝试使用commandline.StandardInput.Write()
,.WriteLine()
和诸如\"
之类的特殊引号字符的服务器解决方案,但没有任何效果。我认为控制台过长时会自动截断我的字符串。还有其他解决方案吗?当有人可以提供帮助时,这会很棒。
谢谢
答案 0 :(得分:1)
我不知道为什么,但是我明白了。更改参数顺序将带来成功:
当我写
commandline.StartInfo.Arguments = " " + arg1+ " " + arg2+ " " + arg4+ " " +arg3;
使用
var arg3 = @"-o test.pcm";
var arg4= "-i \"long long text\"";
它有效:-/难道引用的大文本不应该作为最后一个参数吗?对我来说毫无意义...感谢您谈论xD
答案 1 :(得分:0)
using System;
public class Program
{
public void Main(){
var text = "long text string";
var arg1= @"-I <root directory>";
var arg2= @"-v vMale";
var arg3= @"-o test.pcm";
var arg4= @"-i """+ text+ "";
Console.WriteLine( " " + arg1+ " " + arg2+ " " + arg3+ " " + arg4);
}
}
此结果与-I <root directory> -v vMale -o test.pcm -i "long text string
缺少最后一个报价
我已将其更新为此
using System;
public class Program
{
public void Main(){
var text = "long text string";
var arg1= @"-I <root directory>";
var arg2= @"-v vMale";
var arg3= @"-o test.pcm";
var arg4= "-i \""+ text+ "\""; // changes this line
Console.WriteLine( " " + arg1+ " " + arg2+ " " + arg3+ " " + arg4);
}
}
我得到了这个结果-I <root directory> -v vMale -o test.pcm -i "long text string"
尝试一下,让我知道
谢谢
更新: 逐字字符串文字(@)有点奇怪,并带有双引号。我不确定是否最好使用它,但我不喜欢。两种方式都需要转义字符,因此我倾向于坚持我和我的团队所熟悉的东西。