【发布时间】:2011-07-21 15:55:05
【问题描述】:
我有一个使用 WebClient.OpenWrite 调用打开的流编写器。对于这个简化的例子,假设 reader 正在读取 dataChunkSize 的倍数。
using (Stream writer = myWebClient.OpenWrite(myURIString)
{
using (FileStream reader = new FileStream(myFileName, FileMode.Open, FileAccess.Read)
{
for(int i = 0; i < reader.Length; i += dataChunkSize)
{
byte[] data = new byte[dataChunkSize];
reader.Read(data, 0, dataChunkSize);
writer.Write(data, 0, dataChunkSize);
}
reader.Close();
reader.Dispose();
}
writer.Close();
writer.Dispose();
}
我的数据是 2 个 dataChunkSizes 的大小。但是,在调用 writer.Close() 之前,它不会发送任何数据(没有接收到数据),它只发送第一个 dataChunkSize 值的数据...永远不会发送第二个 dataChunkSize 数据。
如何在每次 Write 调用后发送它?我尝试添加 writer.Flush() 但这没有帮助。
谢谢。
【问题讨论】:
-
可能与您的问题无关,但您使用流对象的方式使得调用 Close() 和 Dispose() 显式多余。当“使用”块退出时,它们会自动这样做......
-
嗨,约翰,以下所有答案似乎都与缓冲区有关。您真正的问题仍未得到解答 - 如何让每个缓冲区独立发送?你找到答案了吗,因为调用 Flush() 没有任何作用。
标签: c# stream webclient filestream streamwriter