我有一个使用WebClient.OpenWrite调用打开的流编写器。对于这种简化的情况,假设读者正在读取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数据永远不会被发送。
如何在每次写电话后发送?我尝试添加writer.Flush()但这没有帮助。
感谢。
答案 0 :(得分:0)
我猜写是缓冲的。在缓冲区已满或写入器关闭之前,它不会写入。
答案 1 :(得分:0)
我认为你的问题是因为你的上一个块可能不是你期望的全长(dataChunkSize)。另外,我会添加Flush来强制每次写入然后如果需要(你不确定刷新是否有效)。尝试将循环内容更改为此...
byte[] data = new byte[dataChunkSize];
int bytesRead = reader.Read(data, 0, dataChunkSize);
writer.Write(data, 0, bytesRead);
writer.Flush();
答案 2 :(得分:0)
WebClient可能会使用内部缓冲流(网络等)。
关于读者。它可以阅读更少。 所以最好使用
int amountRead = reader.Read(data, 0, dataChunkSize);
writer.Write(data, 0, amountRead);
i += amountRead;
答案 3 :(得分:0)
如果要在关闭之前写入
,则需要调用stream.Flush()方法