Wie kann man überprüfen, ob eine Datei auf einem Server existiert c # und die WebClient-Klasse

StackOverflow https://stackoverflow.com/questions/830435

Frage

In meiner Anwendung ich den WebClient verwenden Class-Dateien von einem Webserver herunterzuladen, indem Sie einfach die Downloadfile Aufruf Methode. Jetzt muss ich überprüfen, ob eine bestimmte Datei zum Download vor vorhanden ist (oder falls ich möchte nur sicherstellen, dass es vorhanden ist). Ich habe zwei Fragen mit, dass:

  1. Was ist die beste Art und Weise, ob eine Datei auf einem Server besteht zu überprüfen, ohne über den Draht zu viel Daten-Übertragung? (Es ist eine ziemlich große Anzahl von Dateien, die ich überprüfen müssen)
  2. Gibt es eine Möglichkeit, die Größe eines bestimmten Remote-Datei zu erhalten, ohne sie herunterzuladen?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

WebClient ist ziemlich begrenzt; wenn Sie mit WebRequest wechseln, dann erhalten Sie die Möglichkeit, eine HTTP HEAD-Anforderung zu senden. Wenn Sie die Anforderung ausgeben, sollten Sie entweder eine Fehlermeldung angezeigt (wenn die Datei fehlt) oder ein WebResponse mit einer gültigen ContentLength Eigenschaft.

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);
}

Andere Tipps

Wenn Sie anfordern Datei mit dem WebClient Klasse, die Fehler 404 (Datei nicht gefunden) wird zu einer Ausnahme führen. Der beste Weg ist, diese Ausnahme zu behandeln und eine Fahne benutzen, die eingestellt werden können, um zu sehen, ob die Datei vorhanden ist oder nicht.

Der Beispielcode lautet 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 können den Code in jeweiligen, wenn Blöcke setzen. Hoffe, es hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top