2011-01-22 10 views
13

मैं उपयोग HTTP GET है कि एक ब्राउज़र में एक ज़िप फ़ाइल डाउनलोड करता है, https://example.com/up/DBID/a/rRID/eFID/vVID की तरह कुछ (नहीं सटीक यूआरएल)मैं सी # में ज़िप फ़ाइल कैसे डाउनलोड करूं?

अब, जब मैं एक के लिए (एक ही GET पद्धति के रूप में ऊपर) सी # कोड में एक ही डाउनलोड करने की कोशिश डेस्कटॉप एप्लिकेशन, डाउनलोड की गई ज़िप फ़ाइल वैध संग्रह फ़ाइल नहीं है। जब मैंने नोटपैड में यह फ़ाइल खोली, तो यह कुछ HTML पृष्ठ था।

मुझे लगता है कि मैं कुछ शीर्षलेख सही तरीके से सेट नहीं कर रहा हूं। मैंने उदाहरणों के लिए चारों ओर देखा। मुझे कई wrt अपलोड मिलेगा, लेकिन डाउनलोड के लिए कुछ भी नहीं देखा।

कोड:

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

यह एक unguessable सवाल 'यह काम नहीं करता है'। पोस्ट कोड, दस्तावेज़ जो आप हेक्स व्यूअर में फ़ाइल खोलते समय देखते हैं। –

उत्तर

37

यह मुख्य रूप से, क्योंकि आप एक StreamWriter : TextWriter का उपयोग एक द्विआधारी ज़िप फ़ाइल को संभालने के लिए है। एक स्ट्रीमवाइटर टेक्स्ट की अपेक्षा करता है और एक एन्कोडिंग लागू करेगा। और यहां तक ​​कि सरल ASCII एन्कोडर भी 'ठीक' करने का प्रयास कर सकता है जो यह सोचता है कि अमान्य लाइन-एंडिंग हैं।

आप के साथ अपने सभी कोड की जगह ले सकता:

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

ओह हाँ, मैं वही समस्या देख सकता हूं। –

+0

+1 ने मुझे हराया - @ एएल: मैंने इसे ज़िप फ़ाइल के साथ परीक्षण किया और यह ठीक काम करता है, क्या आप वाकई फ़ाइल को दूषित नहीं कर चुके हैं? – BrokenGlass

+0

वेब क्लाइंट ने उसी प्रकार की ज़िप फ़ाइल भी बनाई है। – Merrin

7

तुम सिर्फ एक 2-लाइनर के लिए WebClient इस्तेमाल कर सकते हैं:

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

लघु और सरल। मुझे उस तरह के प्रोग्रामिंग पसंद है। आपके लिए +1 –

+1

@anvarbekraupov: मैं 'उपयोग' कथन का उपयोग कर रहा हूं - कठिन – BrokenGlass

+0

@ ब्रोकनग्लस देखें, मेरे डाउनग्रेड को +1, माफ़ी के साथ बदल दिया गया है! –

संबंधित मुद्दे