【发布时间】:2013-02-01 00:09:52
【问题描述】:
我怎样才能得到StreamReader 的长度,因为我知道它不会再被写入任何内容。
我想也许我可以将所有数据传递给MemoryStream,它有一个名为Length 的方法,但我被困在如何将字节[] 附加到MemoryStream 上。
private void Cmd(string command, string parameter, object stream)
{
StreamWriter writer = (StreamWriter)stream;
StreamWriter input;
StreamReader output;
Process process = new Process();
try
{
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.FileName = "cmd";
process.Start();
input = process.StandardInput;
output = process.StandardOutput;
input.WriteLine(command + " " + parameter);
input.WriteLine("exit");
using (MemoryStream ms = new MemoryStream())
{
int length = 1024;
char[] charbuffer = new char[length];
byte[] bytebuffer = new byte[length];
while (!output.EndOfStream)
{
output.Read(charbuffer, 0, charbuffer.Length);
for (int i = 0; i < length; i++)
{
bytebuffer[i] = Convert.ToByte(charbuffer[i]);
}
//append bytebuffer to memory stream here
}
long size = ms.Length;
writer.WriteLine(size);
writer.Flush(); //send size of the following message
//send message
}
}
catch (Exception e)
{
InsertLog(2, "Could not run CMD command");
writer.WriteLine("Not valid. Ex: " + e.Message);
}
writer.Flush();
}
那么,我如何动态地将一个字节[] 附加到 MemoryStream 中?
有什么比这更好的方法来获得output 的长度,这样我就可以警告另一端将要发送的消息的大小?
【问题讨论】:
-
size或length是什么意思? -
当提到它们时,我指的是各自变量上的字节/字符的数量。
-
我不明白.. 你有
bytebuffer.. 的长度。为什么不直接使用呢? -
@BrunoKlein 但是您在流上循环直到
EOF.. 并将所有内容存储在bytebuffer。 -
@BrunoKlein 再说一句,附加到我的回答中,您可以使用
m.WriteByte方法将每个字节一次写入MemoryStream。这将使您完全消除bytebuffer。
标签: c# streamreader memorystream