2009-07-24 12 views
0

Ich habe einen Link zu zwei Dateien. Sie können die gleiche Datei sein, aber sie sind möglicherweise nicht die gleiche URL. Ich möchte herausfinden, ob sie gleich sind, indem Sie die Länge des Inhalts überprüfen, bevor Sie einen vollständigen Download durchführen. Was ist der beste Weg, dies zu tun?Erhalten einer Kopfzeile/Dateigröße in .NET

Derzeit verwende ich Webbrowser-Steuerelement, um die Seite zu laden und Daten zu extrahieren und dann WebClient.Download zu verwenden, um die Datei zu erhalten. Gibt es eine Möglichkeit, mit WebClient die Dateigröße zu überprüfen, bevor ich die gesamte Datei herunterlade?

+0

Dupe: http://stackoverflow.com/questions/357190/asp-net-c -detect-file-size-from-other-server –

Antwort

4

ich einen ausgezeichneten Artikel gefunden, Get file length over HTTP before you download it, die eine Möglichkeit bietet, die für mich sehr gut funktioniert:

static public long GetFileSize(string url) 
    { 
     using (WebClient obj = new WebClient()) 
     using (Stream s = obj.OpenRead(url)) 
      return long.Parse(obj.ResponseHeaders["Content-Length"].ToString()); 
    } 
3

Gleichheit der Längen bedeutet nicht, dass Dateien identisch sind. Wenn Sie jedoch sicher sind, dass dies ausreicht, um die Gleichheit zu bestätigen, können Sie eine HttpWebRequest mit Method auf HEAD: Dies wird nur Dateiheader, einschließlich herunterladen.

+0

unter der Annahme, dass der Content-Length-Header gesetzt wird, die je nach Webserver variieren kann und ob serverseitiger Code an dem Download beteiligt ist – RobV

+0

HEAD-Requests werden zur Verarbeitung der genauso wie normal, dann muss der Körper weggeworfen werden ... Aber du hast recht, manche Systeme sind wahrscheinlich faul. –

Verwandte Themen