كيفية التحقق من وجود ملف على الخادم باستخدام c# وفئة WebClient

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

سؤال

في تطبيقي أستخدم العميل على شبكة الإنترنت فئة لتنزيل الملفات من خادم الويب بمجرد الاتصال بـ تحميل الملف طريقة.أحتاج الآن إلى التحقق من وجود ملف معين قبل تنزيله (أو في حالة رغبتي فقط في التأكد من وجوده).عندي سؤالين مع ذلك:

  1. ما هي أفضل طريقة للتحقق من وجود ملف على الخادم دون نقل الكثير من البيانات عبر السلك؟(إنه عدد كبير جدًا من الملفات التي أحتاج إلى التحقق منها)
  2. هل هناك طريقة للحصول على حجم ملف بعيد معين دون تنزيله؟

شكرا لك مقدما!

هل كانت مفيدة؟

المحلول

WebClient محدودة إلى حد ما؛إذا قمت بالتبديل إلى استخدام WebRequest, ، ثم تكتسب القدرة على إرسال طلب HTTP HEAD.عند إصدار الطلب، يجب أن تحصل إما على خطأ (إذا كان الملف مفقودًا)، أو خطأ WebResponse مع صالحة ContentLength ملكية.

يحرر: رمز المثال:

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

نصائح أخرى

عند طلب الملف باستخدام العميل على شبكة الإنترنت فئة، الخطأ 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!!!");
}

يمكنك وضع الكود الخاص بك في الكتل الخاصة بها.نأمل أن يساعد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top