2009-05-06 9 views
19

In meiner Anwendung verwende ich die WebClient Klasse-Dateien von einem Webserver herunterzuladen, indem Sie einfach den Aufruf der Downloadfile Methode. Jetzt muss ich prüfen, ob eine bestimmte Datei existiert, bevor ich sie herunterlade (oder falls ich nur sicherstellen will, dass sie existiert). Ich habe mit, dass zwei Fragen bekommen:Wie kann man überprüfen, ob eine Datei auf einem Server existiert C# und die WebClient-Klasse

  1. Was ist der beste Weg, um zu überprüfen, ob eine Datei zu vielen Daten auf einem Server vorhanden ist über den Draht ohne Übertragung? (Es ist eine ziemlich große Anzahl von Dateien, die ich überprüfen muss)
  2. Gibt es eine Möglichkeit, die Größe einer bestimmten Remote-Datei ohne Download zu erhalten?

Vielen Dank im Voraus!

+0

Möglicherweise möchten Sie den Titel Ihrer Frage ändern, um klarzustellen, dass Sie den WebClient verwenden und Ihr Code nicht direkt auf dem Webserver ausgeführt wird. –

+0

Hat das gemacht. Danke für den Tipp. – Mats

+0

Hier ist eine blog post Ich schrieb in dieser Angelegenheit in der Vergangenheit. Ich setze es hier für zukünftige Suchen ... –

Antwort

39

WebClient ist ziemlich begrenzt; Wenn Sie zur Verwendung von WebRequest wechseln, können Sie eine HTTP HEAD-Anfrage senden. Wenn Sie die Anforderung ausgeben, sollten Sie entweder eine Fehlermeldung (wenn die Datei fehlt) oder eine WebResponse mit einer gültigen ContentLength-Eigenschaft erhalten.

Edit: Beispielcode:

WebRequest request = WebRequest.Create(new Uri("http://www.example.com/")); 
request.Method = "HEAD"; 

using(WebResponse response = request.GetResponse()) { 
    Console.WriteLine("{0} {1}", response.ContentLength, response.ContentType); 
} 
+0

Danke für Ihre Antwort! Ich habe gesehen, dass ich eine Antwort über die GetResponse() -Methode bekommen kann und dann die ContentLength überprüfen. Aber stellt dies sicher, dass die gesamte Datei nicht heruntergeladen wird? Ich kann keine Möglichkeit finden, eine HTTP HEAD-Anfrage zu senden. Könnten Sie mir in die richtige Richtung zeigen? – Mats

+0

@Matthias Erstellen Sie eine WebRequest mit WebRequest.Create (uri) und legen Sie die Eigenschaft 'Method' auf "HEAD" fest. – chakrit

+0

Was Chakrit sagte; Siehe auch Beispiel. –

4

Wenn Sie Datei mit der WebClient Klasse beantragen, die Fehler 404 (Datei nicht gefunden) werden zu einer Ausnahme führen. Der beste Weg ist, diese Ausnahme zu behandeln und ein Flag zu verwenden, das gesetzt werden kann, um zu sehen, ob die Datei existiert oder nicht.

Der Beispielcode geht wie folgt:

System.Net.HttpWebRequest request = null; 
System.Net.HttpWebResponse response = null; 
request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("www.example.com/somepath"); 
request.Timeout = 30000; 
try 
{ 
    response = (System.Net.HttpWebResponse)request.GetResponse(); 
    flag = 1; 
} 
catch 
{ 
    flag = -1; 
} 

if (flag==1) 
{ 
    Console.WriteLine("File Found!!!"); 
} 
else 
{ 
    Console.WriteLine("File Not Found!!!"); 
} 

Sie Ihren Code, wenn Blöcke in jeweiligen setzen können. Hoffe es hilft!

Verwandte Themen