通过块

时间:2015-08-08 12:36:59

标签: c# process stream redirectstandardoutput

对于c#中的流,我非常新鲜,但我对基础知识有些熟悉。

我需要帮助设置最有效的方法来挂钩到未知长度的流,并将部分读取发送到另一个函数,直到到达流的末尾。有人可以看看我的hava,并帮助我填写while循环中的部分,或者可能如果while循环不是最好的方式告诉我什么是更好的。非常感谢任何帮助。

var processStartInfo = new ProcessStartInfo
{
    FileName = "program.exe",
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
    UseShellExecute = false,
    CreateNoWindow = true,
    Arguments = " -some -arguments"
};
theProcess.StartInfo = processStartInfo;
theProcess.Start();

while (!theProcess.HasExited)
{
    int count = 0;
    var b = new byte[32768]; // 32k
    while ((count = theProcess.StandardOutput.BaseStream.Read(b, 0, b.Length)) > 0)
    {
        SendChunck() // ?
    }
}

1 个答案:

答案 0 :(得分:1)

您知道通过count变量从原始流中读取了多少字节,因此您可以将它们放入缓冲区

while ((count = theProcess.StandardOutput.BaseStream.Read(b, 0, b.Length)) > 0)
{
    byte[] actual = b.Take(count).ToArray();
    SendChunck(actual);
}

或者如果您的SendChunk方法设计为以Stream作为参数,则可以直接将原始对象传递给它:

SendChunck(theProcess.StandardOutput.BaseStream);

然后该方法可以处理以块为单位读取数据。