2011-01-22 21 views
13

私はC#のコードで同じダウンロード(上記と同じGETメソッド)を実行しようとしたとき、私は、HTTP GETブラウザでのzipファイルをダウンロードすること、https://example.com/up/DBID/a/rRID/eFID/vVID(ない正確なURL)のような何か今C#でzipファイルをダウンロードするにはどうすればよいですか?

を使用デスクトップアプリケーションの場合、ダウンロードしたzipファイルは有効なアーカイブファイルではありません。メモ帳でこのファイルを開いたとき、それはいくつかのHTMLページでした。

私はいくつかのヘッダーを正しく設定していないと思います。私は例を探しました。私はいくつかのwrtアップロードを見つけたが、ダウンロードのために何も見なかった。

コード:バイナリZipファイルを処理するためにStreamWriter : TextWriterを使用しているため

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = "GET"; 
request.ContentType = "application/zip"; 
try 
{ 
    HttpWebResponse res = (HttpWebResponse)request.GetResponse(); 
    using (StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.Default)) 
    { 
     StreamWriter oWriter = new StreamWriter(@"D:\Downloads\1.zip"); 
     oWriter.Write(sr.ReadToEnd()); 
     oWriter.Close(); 
    } 
    res.Close(); 
} 
catch (Exception ex) 
{ 
} 
+4

これは質問を「それは動作しません」推測できないです。コードを投稿し、16進表示でファイルを開くときに表示される内容を文書化します。 –

答えて

37

それは主にです。 StreamWriterはテキストを要求し、エンコードを適用します。そして、単純なASCIIエンコーダーでさえ、無効な​​行末であると思うものを「修正」しようとするかもしれません。

あなたはですべてのコードを置き換えることができます。

using (var client = new WebClient()) 
    { 
    client.DownloadFile("http://something", @"D:\Downloads\1.zip"); 
    } 
+0

ああ、私はそこに同じ問題を見ることができます。 –

+0

+1私を打ち負かす - @AI:これをzipファイルでテストしたところ、うまくいきました。ファイル自体は既に破損していないのでしょうか? – BrokenGlass

+0

WebClientも同じタイプのzipファイルを作成しました。 – Merrin

7

あなたはわずか2ライナー用WebClientを使用することができます。

using(WebClient wc = new WebClient()) 
{ 
    wc.DownloadFile(url, @"D:\Downloads\1.zip"); 
} 
+0

短くてシンプルです。私はその種のプログラミングが好きです。あなたのために+1 –

+1

@anvarbekraupov:私は 'using'ステートメントを使用しています - もっと見てください – BrokenGlass

+0

@BrokenGlass、+1、謝罪と私のダウングレードを交換! –

関連する問題