Bru*_*ein 5 c# memorystream streamreader
我如何获得a的长度StreamReader,因为我知道将不再写入任何内容。我以为也许可以将所有数据传递给a MemoryStream,该方法有一个称为的方法Length,但是我对如何将byte []附加到a感到困惑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();
}
Run Code Online (Sandbox Code Playgroud)
那么,如何才能将byte []附加到MemoryStream?还有什么比这更好的方法来获取长度了,output所以我可以警告另一端将要发送的消息的大小吗?
小智 5
这对你有用吗?
StreamReader sr = new StreamReader(FilePath);
long x = sr.BaseStream.Length;
Run Code Online (Sandbox Code Playgroud)
MemoryStream有MemoryStream.Write Method,它将字节数组写入流:
ms.Write(bytebuffer,0,bytebuffer.Length);
Run Code Online (Sandbox Code Playgroud)
因此,您可以调用它来将另一部分字节添加到输出流中。但请记住,为了能够在MemoryStream所有写入操作结束后进行读取,您必须使用MemoryStream.Seek 方法将当前流中的位置设置为其开头:
//all write operations
ms.Seek(0, SeekOrigin.Begin);
//now ready to be read
Run Code Online (Sandbox Code Playgroud)
这是最简单的方法。当然,您可以在读/写时动态地在流中移动。但这可能容易出错。
要获取流的长度,即ms.Length,您不必寻找流的开头。
我想,值得注意的是,如果bytebuffer仅用于在将字节复制到 之前存储字节MemoryStream,则可以使用MemoryStream.WriteByte 方法代替。这会让你bytebuffer彻底废除。
for (int i = 0; i < length; i++)
{
ms.WriteByte(Convert.ToByte(charbuffer[i]));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16110 次 |
| 最近记录: |