2010-05-29 12 views
17

Bir HttpWebResponse dosyasından dosya indirmeye ve kaydetmeye çalışıyorum ancak dosyayı (Metin Dosyaları dışında) düzgün kaydetmeyle ilgili sorun yaşıyorum.C# bir HTTP istemcisinden dosya kaydetme

Ben onun bir şey bu bölümünde ilgisi düşünüyorum: Yukarıdaki kod ile

byte[] byteArray = Encoding.UTF8.GetBytes(http.Response.Content); 
MemoryStream stream = new MemoryStream(byteArray); 

Metin Dosyaları çalışma ince ama kurtarmaya çalışırken bir Image İçerik, bozulmuş olur dosya. Nasıl

söylemeyi unutmuşum bu 'dize' bir görüntü dosyasına veri (ve diğer ikili dosyaları) yazmak yapmak, bu .NET CP 3.5 ve ben vb

OAuth'u eklemek için HttpWebResponse sınıfının etrafında sarıcı sınıf var
+1

Lütfen dosyaya yazdığınız kodu gönderin. Belki de metin modunda yazıyorsunuzdur. İkili modda yazmalısınız. – Senthil

+0

@Senthil: Hayır, problemli olan okuma kodu - ve bu zaten gösterildi. –

+0

Hmmm .., Encoding.UTF8.GetBytes() bölümünün sorunu mu? – Senthil

cevap

44

Sorun, ikili verileri metin olsa bile yorumluyor olmanızdır; bu, içeriği bayt yerine bir dize olarak işlemeye başlar başlamaz sorunludur. Sarıcı sınıfınızın ayrıntılarını vermediniz, ancak Content mülkünüzün bir dizgi döndürdüğünü varsayarak bunu kullanamayacaksınız. Sarmalayıcı sınıfınız, web yanıtından gelen ham verilere ulaşmanıza izin vermiyorsa, bunu değiştirmeniz gerekir.

Eğer .NET 4 kullanıyorsanız, yeni CopyTo yöntemi kullanabilirsiniz: Eğer .NET 4 kullanmıyorsanız

using (Stream output = File.OpenWrite("file.dat")) 
using (Stream input = http.Response.GetResponseStream()) 
{ 
    input.CopyTo(output); 
} 

, el kopyalama yapmak zorunda:

using (Stream output = File.OpenWrite("file.dat")) 
using (Stream input = http.Response.GetResponseStream()) 
{ 
    byte[] buffer = new byte[8192]; 
    int bytesRead; 
    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     output.Write(buffer, 0, bytesRead); 
    } 
} 
+0

Yeh Ben sorun olduğunu düşündüm. Ek Bilgi (.NET Compact 3.5) – dkarzon

+0

@ d1k_is: İkinci kod parçacığı, kompakt çerçevede (çıktı akışınızı değiştirmekten başka bir şekilde) düzgün çalışmalıdır. –

+0

Evet, sorun buydu. Bu yüzden, httpresponse sarmalayıcısını değiştirmek zorunda kaldım, böylece sadece Content string özelliğine değil, bir dosyaya akışı okudu. Teşekkürler! – dkarzon

İlgili konular