Передача большого строкового параметра во внешнее приложение - PullRequest
0 голосов
/ 11 сентября 2018

Я работаю над программой, которая запускает другое приложение с несколькими (большой текст) аргументами. Когда я запускаю это внешнее приложение через cmd.exe, все работает нормально (также с несколькими строками в качестве аргумента).

ttv.exe -I <root directory> -v vMale -i "large large text" -o test.pcm

Но когда я попытался вызвать его из моей программы, я обнаружил, что аргумент "large large text" слишком велик для этого вызова, потому что ограничение строки 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 голосов
/ 12 сентября 2018

Не знаю почему, но я понял. Изменение порядка аргументов приносит успех: Когда я пишу commandline.StartInfo.Arguments = " " + arg1+ " " + arg2+ " " + arg4+ " " +arg3;

с

var arg3 = @"-o test.pcm"; var arg4= "-i \"long long text\"";

это работает: - / Может быть, цитируемый большой текст не должен быть последним аргументом? Не имеет смысла для меня ... Спасибо за разговор о xD

0 голосов
/ 11 сентября 2018
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"

попробуй и дай мне знать

спасибо

Обновление: Строковый литерал (@) становится немного странным с двойными кавычками. Я не уверен, лучше ли это использовать или нет, но я предпочитаю нет. экранирование персонажей необходимо в обоих направлениях, поэтому я стараюсь придерживаться того, с чем я и моя команда знакомы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...