Come verificare se esiste un file su un server usando c # e la classe WebClient
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:
- 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)
- C'è un modo per ottenere le dimensioni di un determinato file remoto senza scaricarlo?
Grazie in anticipo!
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!