在C#(在SuSE上以Mono 2.8运行的.NET 4.0)中,我想运行外部批处理命令并以二进制形式捕获其输出.我使用的外部工具称为"samtools"(samtools.sourceforge.net),除此之外,它还可以从名为BAM的索引二进制文件格式返回记录.
我使用Process.Start来运行外部命令,我知道我可以通过重定向Process.StandardOutput来捕获它的输出.问题是,这是一个带编码的文本流,所以它不允许我访问输出的原始字节.我找到的几乎可行的解决方案是访问底层流.
这是我的代码:
Process cmdProcess = new Process();
ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
cmdStartInfo.FileName = "samtools";
cmdStartInfo.RedirectStandardError = true;
cmdStartInfo.RedirectStandardOutput = true;
cmdStartInfo.RedirectStandardInput = false;
cmdStartInfo.UseShellExecute = false;
cmdStartInfo.CreateNoWindow = true;
cmdStartInfo.Arguments = "view -u " + BamFileName + " " + chromosome + ":" + start + "-" + end;
cmdProcess.EnableRaisingEvents = true;
cmdProcess.StartInfo = cmdStartInfo;
cmdProcess.Start();
// Prepare to read each alignment (binary)
var br = new BinaryReader(cmdProcess.StandardOutput.BaseStream);
while (!cmdProcess.StandardOutput.EndOfStream)
{
// Consume the initial, undocumented …Run Code Online (Sandbox Code Playgroud)