将大字符串参数传递给外部应用程序

时间:2018-09-11 18:34:12

标签: c# command-line process arguments

我正在研究一个程序,该程序运行带有多个(大文本)参数的另一个应用程序。 当我通过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()和诸如\"之类的特殊引号字符的服务器解决方案,但没有任何效果。我认为控制台过长时会自动截断我的字符串。还有其他解决方案吗?当有人可以提供帮助时,这会很棒。 谢谢

2 个答案:

答案 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"

尝试一下,让我知道

谢谢

更新: 逐字字符串文字(@)有点奇怪,并带有双引号。我不确定是否最好使用它,但我不喜欢。两种方式都需要转义字符,因此我倾向于坚持我和我的团队所熟悉的东西。