2015-12-03 2 views
2

Использование класса процесса в System.Diagnostics, я смог запустить исполняемый файл в программе, но я хочу сгенерировать текст в своей программе и передать его исполняемому файлу, чтобы преобразовать прямо в выходной файл (.midi), а не генерировать файл и затем преобразовать файл. Это возможно? Если нет, то какой простой способ, скажем, преобразовать текст, который я генерирую в своей программе, в файл, преобразовать файл в выходной файл, а затем удалить этот файл? Исполняемые источниковедение: http://www.fourmilab.ch/webtools/midicsv/Изменение входного потока для командной строки на C# из «Csvmidi.exe file.text file.midi» на «Csvmidi.exe inputString file.midi»

using System.Diagnostics 

Process converter= new Process(); 
converter.StartInfo.FileName = "Csvmidi.exe"; 
converter.StartInfo.Arguments = "file.midi file.midi"; 
converter.Start(); 

Например, скажем, у меня есть строка, inputText, что соответствует содержимое файла, file.text.

string inputText = "0, 0, Header, 1, 1, 480\n" + 
       "1, 0, Start_track\n" + 
       "1, 0, Title_t, \"Close Encounters\"\n" + 
       "1, 0, Text_t, \"Sample for MIDIcsv Distribution\"\n" + 
       "1, 0, Copyright_t, \"This file is in the public domain\"\n" + 
       "1, 0, Tempo, 500000\n" + 
       "1, 0, End_track\n" + 
       "2, 0, Start_track\n" + 
       "2, 0, Instrument_name_t, \"Church Organ\"\n" + 
       "2, 0, Program_c, 1, 19\n" + 
       "2, 0, Note_on_c, 1, 79, 81\n" + 
       "2, 960, Note_off_c, 1, 79, 0\n" + 
       "2, 960, Note_on_c, 1, 81, 81\n" + 
       "2, 1920, Note_off_c, 1, 81, 0\n" + 
       "2, 1920, Note_on_c, 1, 77, 81\n" + 
       "2, 2880, Note_off_c, 1, 77, 0\n" + 
       "2, 2880, Note_on_c, 1, 65, 81\n" + 
       "2, 3840, Note_off_c, 1, 65, 0\n" + 
       "2, 3840, Note_on_c, 1, 72, 81\n" + 
       "2, 4800, Note_off_c, 1, 72, 0\n" + 
       "2, 4800, End_track\n" + 
       "0, 0, End_of_file"; 

Могу ли я передать эту строку исполняемому файлу вместо текстового файла?

Редактировать: У меня был друг, помог мне, создав временный файл, чтобы скопировать текст, чтобы запустить процесс перед его удалением. Спасибо всем за помощь!

+0

Если этот 'converter.exe' принимает только входные и выходные пути файлов в качестве аргументов, вам придется создавать файлы. –

+0

В нем говорится, что преобразователь.exe может считывать ввод со стандартного ввода, если файл не указан, поэтому я предполагаю, что это будет означать медленное вхождение значений в командной строке. Означает ли это, что это возможно, я могу просто передать значения как одну строку, считая, что она отформатирована правильно? – Ignify

ответ

0

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

Как вы говорите, он может считывать ввод со стандартного ввода. Если предположить, что входные данные отформатированы правильно, вы можете запустить процесс и записать его непосредственно стандартного ввода:

Process p = new Process(); 

p.StartInfo.FileName = "converter.exe"; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardInput = true; 

p.Start(); 

p.StandardInput.Write(inputText); 
p.StandardInput.Close(); 

p.WaitForExit(); 
p.Close(); 

В этом примере, я предполагаю, что он по-прежнему создает выходной файл. Если в случае использования стандартного ввода он может выводиться только в стандартном выводе, тогда вам нужно будет использовать p.StartInfo.RedirectStandardOutput = true и также читать p.StartInfo.StandardOutput.

+0

Спасибо, я попробую это прямо сейчас! – Ignify

+0

p.StartInfo.StandardOutput не работает для меня, поэтому я попробовал Console.WriteLine (outputFileName); написать стандартный вывод на консоль, и я не думаю, что файл появился где угодно. Я пробовал без стандартных линий, и я получил то же самое. Я что-то делаю неправильно, чтобы не получить файл? – Ignify

+0

@Ignify Использование внешних исполняемых файлов - это что-то вроде черного ящика. Проверьте, как это работает, если вы просто откроете файл и введите свои данные. Он должен сгенерировать файл. Попробуйте применить ключ '/?' Или '-?', Чтобы получить документацию по этому исполняемому файлу. –