2008-09-23 21 views

cevap

84

Evet, desteklerin konuştuğunuz HTTP sunucusunu varsayarak/Bu veriyor Sunucudaki içeriğin boyutunu belirlemenin tek yolu onu indirmektir. Bu özellikle güvenilir olmadığından, çoğu sunucu bu bilgileri içerecektir.

+11

Eğer 'using' kullanıyorsanız, otomatik olarak onu atar. http://msdn.microsoft.com/tr-tr/library/yh598w02(v=vs.110).aspx – justderb

+2

Başka bir not, eğer bu son derece büyük dosyalar için kullanılıyorsa, int 'yeterli olmaz, ihtiyacınız olacak Uzun ContentLength, 've' long.TryParse (xxx) 'i kullanmak için 2.14GB boyutundaki bir dönüş değerinden daha fazlasını destekleyin. – Preston

+0

http sıkıştırması etkin değil gerçek dosya boyutunu atmak değil mi? – Justin

25

Bu, HTTP üstbilgileriyle yapılabilir mi?

Evet, işte bu yol. bilgisi varsa, Content-Length olarak üstbilgide bulunur. Bununla birlikte, bunun mutlaka gerekli olmadığını unutmayın.

Yalnızca üstbilgi indirme işlemi GET yerine HEAD isteği kullanılarak yapılabilir. Belki şu kod yardımcı olur:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://example.com/"); 
req.Method = "HEAD"; 
long len; 
using(HttpWebResponse resp = (HttpWebResponse)(req.GetResponse())) 
{ 
    len = resp.ContentLength; 
} 

Bildirimi HttpWebResponse nesne üzerinde içerik uzunluğu için özelliği - gerek elle Content-Length başlığını ayrıştırmak. ,

System.Net.WebRequest req = System.Net.HttpWebRequest.Create("http://stackoverflow.com/robots.txt"); 
req.Method = "HEAD"; 
using (System.Net.WebResponse resp = req.GetResponse()) 
{ 
    int ContentLength; 
    if(int.TryParse(resp.Headers.Get("Content-Length"), out ContentLength)) 
    { 
     //Do something useful with ContentLength here 
    } 
} 

BAŞ yöntemi kullanılarak izin verilmez ise veya içerik-uzunluk başlığı sunucu cevapta mevcut değildir:

+0

Will değil 'size BAŞ yanıtın uzunluğunu göre değil, sizeof almakla ilgi dosyasının uzunluğu vermek için yukarıdaki resp.ContentLength'? –

+1

@Adam No. Belgeler şunları söylüyor: “ContentLength özelliği, yanıtla döndürülen Content-Length başlığının değerini içerir.” –

+1

Doğru, teşekkürler Konrad. –

0
WebClient webClient = new WebClient(); 
webClient.OpenRead("http://stackoverflow.com/robots.txt"); 
long totalSizeBytes= Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]); 
Console.WriteLine((totalSizeBytes));