C #: чужой EXE-канал ввода / вывода из переменной строки - PullRequest
2 голосов
/ 27 августа 2010

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

Чужая программа в основном делает одну вещь:

program.exe --input: foo.txt --output: bar.txt

Что я хотел бы знать ... Могу ли я заменить foo.txt и bar.txt на string [] в моем «объекте».

Вместо того, чтобы извлекать информацию из текстового файла и помещать в новый текстовый файл ... Я хочу извлечь информацию из имеющейся у меня переменной ... в другую переменную, которую я бы сделал.

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

Что у меня сейчас (по большей части, с удаленным пухом):

public bool _Out_Schema(string output)
{
    clear(output);                                      // clear output directory

    // Assign schema name to path
    string path = output + '\\' + lf.filename + ".schema";
    using (StreamWriter SW = new StreamWriter(path))
    {
        SW.Write(lf._schema);
    }                
    return true;
}

public bool _Out_UFD(string input, string output)
{
    clear(output);                                      // clear output directory

    ProcessStartInfo SI = new ProcessStartInfo();
    SI.CreateNoWindow = true;
    SI.WindowStyle = ProcessWindowStyle.Hidden;
    SI.FileName = "ufdschema.exe";                      // foreign program

    SI.Arguments = String.Format("--ischema={0}\\{2}.schema --oufd={1}\\{2}.ufd", input, output, (FI.Name.Split('.'))[0]);
    using (Process P = Process.Start(SI)) { P.WaitForExit(); }

    return true;
}

Я бы хотел взятьlf.schema (строковая переменная) в качестве входных данных ... и создать что-то вроде lf.ufd в качестве выходных данных

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Если в программе нет способа указать «чтение из стандартного ввода и запись в стандартный вывод», вы не можете легко решить вашу проблему.Однако возможно , но для этого потребуются некоторые вещи довольно низкого уровня;в основном вы будете использовать что-то вроде Detours для перехвата CreateFile и привязывать его к каналам, когда он видит специальные имена файлов.ReadFile, WriteFile и CloseHandle не нуждаются в перенаправлении, поскольку они работают как с конвейерами, так и с файловыми дескрипторами.

Это нетривиальное решение, но если у вас есть опыт работы с Win32 API, этовыполнимо в течение нескольких часов, даже если у вас нет предварительных знаний об обходах.

0 голосов
/ 27 августа 2010

Если program.exe ожидает чтения и записи в файлы на диске и принимает имена этих файлов через командную строку, вы не можете сделать какое-либо броское перенаправление, чтобы сделать это иначе.

Еслиу приложения есть другие параметры, которые вы можете настроить, чтобы он принимал входные данные по каналу и возвращал свои выходные данные в консоль, а не в файл, тогда вы должны иметь возможность что-то делать.Судя по деталям, которые у вас сейчас есть, вам, вероятно, не повезло.

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