Я сделал этот маленький инструмент, который просматривает список ссылок на изображения и загружает их на жесткий диск, однако некоторые из фотографий являются неполными (Check this picture), и они даже не создают исключение , В приведенном ниже коде показан способ загрузки, который я использую в своем инструменте.Неполные/поврежденные загруженные файлы
private void Download(string url)
{
try
{
HttpWebRequest Request = WebRequest.Create(url) as HttpWebRequest;
Request.Method = WebRequestMethods.Http.Get;
Request.Timeout = 60 * 1000;
FileInfo ImageFile = new FileInfo(Path.Combine(BaseDirectory, Path.GetFileName(url)));
if (!ImageFile.Exists)
{
using (HttpWebResponse Response = Request.GetResponse() as HttpWebResponse)
{
if (Response.StatusCode.Equals(HttpStatusCode.OK))
{
using (FileStream FStream = new FileStream(ImageFile.FullName, FileMode.Create, FileAccess.Write, FileShare.None, 4096))
Response.GetResponseStream().CopyTo(FStream, 4096);
}
}
}
}
catch (Exception e)
{
Console.WriteLine("Error Downloading: {0}\r\nMessage: {1}", url, e.Message);
}
}
Я не могу понять, является ли проблема на стороне сервера или есть что-то случилось с моим кодом, так что вы думаете?
Не используется ли этот оператор для меня или он просто закрывает FileStream? Кроме того, это происходит только иногда, в других случаях нет проблем с любыми загруженными изображениями, и вот что меня смутило! – PavilionVI
Использование только вызовов Dispose(), которое аккуратно уничтожает объект. Нет никакой гарантии, что поток будет очищен до того, как он будет уничтожен. Время, когда оно действительно срабатывало, вероятно, связано с тем, что поток сбрасывается каким-то другим фактором. Попробуйте вызвать Flush() и посмотреть, как вы набираете –
Хорошо. Я попробую и отправлю отчет позже. – PavilionVI