将 C# 中命令行的输入流从 "Csvmidi.exe file.text file.midi" 更改为 "Csvmidi.exe inputString file.midi"
Changing the input stream for the command line in C# from "Csvmidi.exe file.text file.midi" to "Csvmidi.exe inputString file.midi"
使用 System.Diagnostics 中的过程 class,我已经能够 运行 程序中的可执行文件,但我想在我的程序中生成文本并将其传递给可执行文件直接转换为输出文件(.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, 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";
我可以将此字符串而不是文本文件传递给可执行文件吗?
编辑:我有一个朋友帮助我制作了一个临时文件,将文本复制到 运行 过程中,然后再删除它。感谢大家的帮助!
如果此 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
。
使用 System.Diagnostics 中的过程 class,我已经能够 运行 程序中的可执行文件,但我想在我的程序中生成文本并将其传递给可执行文件直接转换为输出文件(.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, 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";
我可以将此字符串而不是文本文件传递给可执行文件吗?
编辑:我有一个朋友帮助我制作了一个临时文件,将文本复制到 运行 过程中,然后再删除它。感谢大家的帮助!
如果此 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
。