Domanda

Nella mia applicazione utilizzo la classe WebClient per scaricare file da un server Web semplicemente chiamando il metodo DownloadFile . Ora devo controllare se esiste un determinato file prima di scaricarlo (o nel caso in cui voglio solo assicurarmi che esista). Ho due domande a riguardo:

  1. Qual è il modo migliore per verificare se esiste un file su un server senza trasferire molti dati attraverso il filo? (È un numero piuttosto grande di file che devo controllare)
  2. C'è un modo per ottenere le dimensioni di un determinato file remoto senza scaricarlo?

Grazie in anticipo!

È stato utile?

Soluzione

WebClient è abbastanza limitato; se passi all'uso di WebRequest , avrai la possibilità di inviare una richiesta HTTP HEAD. Quando emetti la richiesta, dovresti ricevere un errore (se il file è mancante) o un WebResponse con una proprietà ContentLength valida.

Modifica: Codice di esempio:

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

Altri suggerimenti

Quando richiedi un file utilizzando la classe Client Web , l'errore 404 (file non trovato) genererà un'eccezione. Il modo migliore è gestire quell'eccezione e usare un flag che può essere impostato per vedere se il file esiste o meno.

Il codice di esempio è il seguente:

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

Puoi inserire il tuo codice nei rispettivi blocchi. Spero che sia d'aiuto!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top