2016-05-01 16 views
1

イメージリンクのリストをダウンロードしてハードドライブにダウンロードするこの小さなツールを作成しましたが、画像の一部が不完全で(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); 
    } 
} 

問題がサーバー側にあるのか、自分のコードに問題があるのか​​分からないので、どう思いますか?

答えて

1

データを読んだ後でFlush()に電話してみましたか?ストリームの最後の部分が書き出されていないように見えます。

+0

私はこれを行うためのusingステートメントを使用していないのですか、FileStreamを閉じるだけですか?また、たまにしか起こらず、ダウンロードした画像に問題はなく、混乱してしまいます。 – PavilionVI

+0

使用すると、オブジェクトをきれいに破棄するDispose()が呼び出されます。ストリームが破棄される前にフラッシュされるという保証はありません。それがうまくいった時はおそらく、ストリームが何か他の要因によって洗い流されたためです。 Flush()を呼び出してどうやったらどうなるか確認してください。 –

+0

Ok。私はそれを試して、後で報告します。 – PavilionVI

関連する問題