此功能可从源下载图像并将其添加到zip文件中。 问题是有时图像全部搞砸了(下载1/3,其余是空白),好像下载没有完成。在继续之前,如何确保下载完成?谢谢。
编辑:我有超时,所以它不会无限期地等待。我应该延长超时吗?还是有更好的方法?
public void addImage(string source, string destination)
{
if (isFinalized)
return;
try
{
WebRequest req = WebRequest.Create(source);
req.Timeout = 5000;
WebResponse resp = req.GetResponse();
BufferedStream reader = new BufferedStream(resp.GetResponseStream());
byte[] fileData = new byte[resp.ContentLength];
reader.Read(fileData, 0, fileData.Length);
zip.AddEntry(destination, fileData);
}
catch (Exception exp)
{
}
}
答案 0 :(得分:1)
在您的代码中,您需要检查已读取的字节,看看您是否已完全获取图像。
int FinalRead = reader.Read(fileData, 0, fileData.Length);
bool fImageIsOk = FinalRead == resp.ContentLength ;
另外,我强烈建议您使用BufferedStream
using
我认为msdn have a good example上的示例代码。
你必须关注的部分就是这个。不要试图找到你的缓冲区。最后,您可以检查是否有完整的照片。您还可以检查流程IsClientConnected
int numBytesToRead = receivedData.Length;
while (numBytesToRead > 0)
{
// Read may return anything from 0 to numBytesToRead.
int n = bufStream.Read(receivedData,0, receivedData.Length);
// The end of the file is reached.
if (n == 0)
break;
bytesReceived += n;
numBytesToRead -= n;
}