将 C# 中命令行的输入流从 "Csvmidi.exe file.text file.midi" 更改为 "Csvmidi.exe inputString file.midi"



使用System.Diagnostics中的进程类,我已经能够在程序中运行可执行文件,但我希望在程序中生成文本并将其传递给可执行文件以直接转换为输出文件(.midi),而不是生成文件然后转换文件。这可能吗?如果没有,有什么简单的方法可以将我在程序中生成的文本转换为文件,将文件转换为输出文件,然后删除该文件?可执行文件来源:http://www.fourmilab.ch/webtools/midicsv/

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, 480n" +
               "1, 0, Start_trackn" +
               "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, 500000n" +
               "1, 0, End_trackn" +
               "2, 0, Start_trackn" +
               "2, 0, Instrument_name_t, "Church Organ"n" +
               "2, 0, Program_c, 1, 19n" +
               "2, 0, Note_on_c, 1, 79, 81n" +
               "2, 960, Note_off_c, 1, 79, 0n" +
               "2, 960, Note_on_c, 1, 81, 81n" +
               "2, 1920, Note_off_c, 1, 81, 0n" +
               "2, 1920, Note_on_c, 1, 77, 81n" +
               "2, 2880, Note_off_c, 1, 77, 0n" +
               "2, 2880, Note_on_c, 1, 65, 81n" +
               "2, 3840, Note_off_c, 1, 65, 0n" +
               "2, 3840, Note_on_c, 1, 72, 81n" +
               "2, 4800, Note_off_c, 1, 72, 0n" +
               "2, 4800, End_trackn" +
               "0, 0, End_of_file";

我可以把这个字符串传给可执行文件而不是它的文本文件吗?

编辑:我有一个朋友帮我制作了一个临时文件,在删除之前将文本复制到其中以运行进程。谢谢大家的帮助

如果此converter.exe仅将输入和输出文件路径作为参数,则必须创建文件。

正如您所说,它可以从标准输入读取输入。假设输入数据的格式正确,您可以启动一个进程并直接写入其stdin:

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

相关内容

  • 没有找到相关文章

最新更新