Почему Process.StandardInput.WriteLine не предоставляет ввод для моего процесса?

это мой первый вопрос, поэтому я буду настолько подробным, насколько смогу. В настоящее время я работаю над программой на C # (мы назовем ее TestProgram), которая тестирует другую программу, написанную на C (которую я буду называть StringGen). TestProgram должен запустить StringGen в командном окне, затем передать ему набор входных строк и записать выходные данные для каждой из них. Когда StringGen запущен, он запускает цикл while, который ожидает ввода, передает этот ввод в функцию обработки, а затем возвращает результат.

Моя проблема возникает, когда я пытаюсь, чтобы TestProgram отправил строку в StringGen. Я запускаю StringGen как процесс и пытаюсь передать входные данные с помощью Process.StandardInput.WriteLine (), а затем ищу вывод с помощью Process.StandardOutput.ReadLine (). Прежде чем продолжить, я приведу некоторый код.

Вот основная функция для StringGen:

int main() {
    char result[255];
    char input[255];

    do {
        fgets(input, 100, stdin);
        result = GetDevices(input); //Returns the string required
        printf("%s", result);
    } while (input != "quit");

    return 0;
}

Вот код C #, где я определяю StringGen как процесс:

Process cmd = new Process();

ProcessStartInfo info = new ProcessStartInfo(command, arguements); // Command is the path to the C executeable for StringGen
info.WorkingDirectory = workingDirectory; // Working Directory is the directory where Command is stored
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
info.UseShellExecute = false;
cmd.StartInfo = info;
cmd.Start();

Затем я продолжу использовать этот процесс так:

using (var cmd)
        {
            // Loop through the input strings
            String response;

            foreach (exampleString in StringSet) // Loops through each string
            {
                cmd.StandardInput.WriteLine(exampleString.text); // This is the problem line
                response = cmd.StandardOutput.ReadLine(); // System comes to a halt here
                cmd.StandardOutput.Close();
                if (response == "Something")
                {
                     // Do this
                }
                else
                {
                     // Do that
                }
            }
       }

Команда WriteLine, похоже, не дает никакого ввода в StringGen, и поэтому система зависает на ReadLine, потому что StringGen не возвращает никакого вывода. Я попытался запустить StringGen в командной строке, и он работает нормально, получает ввод с клавиатуры и выводит правильные строки обратно. Я перепробовал все, что мог придумать, и искал по всему этому сайту, а другие пытались найти решение, но каждый пример такого рода кода, кажется, работает хорошо для всех остальных. Я не вижу, что я делаю неправильно. Если бы кто-нибудь мог предложить способ, которым я могу представить свои данные в свою программу StringGen из TestProgram, я был бы очень благодарен. Если я пропустил что-то важное или неясно, пожалуйста, дайте мне знать.

Заметки: Я пробовал и scanf, и fgets в StringGen, оба дают одинаковый результат.

Я попытался использовать буквенную строку с WriteLine (), но до сих пор нет ввода.

Я пытался использовать Write () и Flush () в TestProgram, но безрезультатно.

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

Я не слишком знаком с C #, так как я редактирую чужой код для выполнения тестов на StringGen.

Ответы на вопрос(2)

Ваш ответ на вопрос