【发布时间】:2011-06-02 21:14:31
【问题描述】:
我正在发布一个带有HttpWebRequest 的文件,以及一个页眉和页脚。标题(约 0.5K)和实际文件似乎写得很好,但对于大文件(约 15MB),页脚(大约 29 个字节)似乎永远不会写。
using (Stream requestStream = request.GetRequestStream()) {
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
byte[] buffer = new byte[Math.Min(4096L, fileSize)];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) {
requestStream.Write(buffer, 0, bytesRead);
}
// next line never completes
requestStream.Write(postFooterBytes, 0, postFooterBytes.Length);
// code below is never reached
Console.WriteLine("Why do I never see this message in the console?");
}
有什么想法吗?
预计到达时间:尝试在最后一个 Write() 之前刷新流,这可能会有所帮助,但没有效果。
再次编辑:添加了using(),以澄清我不是一个完全的白痴。另请注意,这是在 another using() 块内 fileStream。
【问题讨论】:
-
很明显,但是您确定当您不使用HttpWebRequest时会发出页脚,对吗? (例如,来自浏览器或 wget)
-
@harpo 我不确定我是否理解。是我发出页脚。
-
你确定你没有在读取时永远循环吗?
-
Console.WriteLine() 调用是否在 requestStream.Write() 调用之前起作用?
-
只是为了澄清:程序挂在最后一次写入中,并且没有抛出异常?另外,如果你不写页脚会发生什么?
标签: c# .net stream httpwebrequest