2009-05-06 15 views
19

अपने आवेदन में उपयोग कर एक सर्वर पर मौजूद है कैसे जाँच करने के लिए। अब मुझे यह जांचने की ज़रूरत है कि एक निश्चित फ़ाइल इसे डाउनलोड करने से पहले मौजूद है (या अगर मैं यह सुनिश्चित करना चाहता हूं कि यह मौजूद है)। मेरे पास दो प्रश्न हैं:अगर एक फाइल मैं <strong>WebClient</strong> वर्ग बस <strong>DownloadFile</strong> विधि को फोन करके एक वेबसर्वर से फ़ाइलों को डाउनलोड करने का उपयोग सी # और WebClient वर्ग

  1. यह जांचने का सबसे अच्छा तरीका क्या है कि किसी सर्वर पर फ़ाइल मौजूद है या नहीं, तार पर अधिक डेटा ट्रांसफर किए बिना? (यह बहुत बड़ी संख्या में फाइलों की जांच करने की आवश्यकता है)
  2. क्या इसे डाउनलोड किए बिना किसी दिए गए दूरस्थ फ़ाइल का आकार प्राप्त करने का कोई तरीका है?

अग्रिम धन्यवाद!

+0

आप यह स्पष्ट करने के लिए अपने प्रश्न का शीर्षक संशोधित करना चाहेंगे कि आप वेब क्लाइंट का उपयोग कर रहे हैं और आपका कोड सीधे वेब सर्वर पर नहीं चल रहा है। –

+0

क्या वह था। संकेत के लिए धन्यवाद। – Mats

+0

यहां एक blog post है जिसे मैंने अतीत में इस मामले के बारे में लिखा था। मैं इसे भविष्य की खोजों के लिए यहां डाल रहा हूं ... –

उत्तर

39

WebClient काफी सीमित है; यदि आप WebRequest का उपयोग करने के लिए स्विच करते हैं, तो आप एक HTTP हेड अनुरोध भेजने की क्षमता प्राप्त करते हैं। जब आप अनुरोध जारी, आप या तो एक त्रुटि मिलना चाहिए (यदि फ़ाइल याद आ रही है), या एक वैध ContentLength संपत्ति के साथ एक WebResponse

संपादित करें: उदाहरण कोड:

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

आपके उत्तर के लिए धन्यवाद! मैंने देखा है कि मैं GetResponse() विधि के माध्यम से प्रतिक्रिया प्राप्त कर सकता हूं और फिर ContentLength की जांच कर सकता हूं। लेकिन क्या यह सुनिश्चित करता है कि पूरी फ़ाइल डाउनलोड नहीं की गई है? मुझे एक HTTP हेड अनुरोध भेजने का कोई तरीका नहीं मिल रहा है। क्या आप मुझे सही दिशा में इंगित कर सकते हैं? – Mats

+0

@Matthias WebRequest.Create (URI) के साथ एक WebRequest बनाएं और फिर 'विधि' संपत्ति "सिर" करने के लिए निर्धारित किया है। – chakrit

+0

क्या चक्रित ने कहा; भी, उदाहरण देखें। –

4

आप WebClient कक्षा का उपयोग कर फ़ाइल का अनुरोध करते हैं, 404 त्रुटि (फ़ाइल नहीं मिली) एक अपवाद को बढ़ावा मिलेगा। सबसे अच्छा तरीका उस अपवाद को संभालना और ध्वज का उपयोग करना है जिसे यह देखने के लिए सेट किया जा सकता है कि फ़ाइल मौजूद है या नहीं।

उदाहरण कोड इस प्रकार है:

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

आप ब्लॉक करता है, तो संबंधित में अपने कोड डाल सकते हैं। उम्मीद है कि यह मदद करता है!