如何更改我的网络流代码以将数据直接写入文件

时间:2014-01-15 05:52:47

标签: c# filestream networkstream

我的代码是:

byte[] buffer = new byte[1024];
int numberOfBytesRead = 0;
MemoryStream receivedData = new MemoryStream();
do
{
numberOfBytesRead = serverStream.Read(buffer, 0, buffer.Length); //Read from network stream
receivedData.Write(buffer, 0, numberOfBytesRead); //Write to memory stream
Thread.Sleep(1);
} while (serverStream.DataAvailable);
File.WriteAllBytes(@"C:\file.png", receivedData.ToArray());

我想将它从MemoryStream转换为FileStream,我不知道。

以及为什么我必须使用Thread.Sleep(1)来完成接收文件的字节。是否有正确的陈述而不是睡眠。

非常感谢

2 个答案:

答案 0 :(得分:0)

转换非常简单,我假设您在如何打开文件时遇到问题。 File类除了使用最后一个之外,还提供了许多有用的实用方法,例如File.OpenWrite

FileStream receivedData = File.OpenWrite(@"C:\file.png");

至于Thread.Sleep(1) - 除非我遗漏了这里未显示的内容 - 看起来有机会让处理器休息,但这是毫无意义的。特别是,Read调用是IO绑定在套接字(网络)上等待提供输入,因此整个循环不太可能值得睡觉。 Thread.Sleep的大多数电话本质上都是黑客。

答案 1 :(得分:0)

使用FileStream的代码:

    byte[] buffer = new byte[1024];
    int numberOfBytesRead = 0;

    FileStream fs = new FileStream(@"C:\file.png", FileMode.Create, FileAccess.Write);
    do
    {
        numberOfBytesRead = serverStream.Read(buffer, 0, buffer.Length); //Read from network stream
        fs.Write(buffer, 0, numberOfBytesRead);
    } while (serverStream.DataAvailable);
    fs.Close();