ممکن است در نرم افزار خود لازم باشد که حجم فایلی را بدست بیاورید. برای این کار لازم است طبق آموزش این پست عمل کنید.


تابع زیر را در پروژه خود کپی کنید. توجه داشته باشید این آموزش بر اساس قواعد جدید سی شارپ 6.0 که در ویژوال استودیو 2015 است نوشته شده، برای استفاده در نسخه های قدیمی تر ممکنه لازم باشه تغییراتی در اون اعمال کنید.

private string GetFileSize(string xurl)
{
try
{
System.Net.WebRequest req = System.Net.WebRequest.Create(xurl);
req.Method = "HEAD";
System.Net.WebResponse resp = req.GetResponse();
long ContentLength = 0;
if (long.TryParse(resp.Headers.Get("Content-Length"), out ContentLength))
{
long B = 0, KB = 1024, MB = KB * 1024, GB = MB * 1024, TB = GB * 1024;
double size = ContentLength;
string suffix = nameof(B);

if (ContentLength >= TB)
{
size = Math.Round((double)ContentLength / TB, 2);
suffix = nameof(TB);
}
else if (ContentLength >= GB)
{
size = Math.Round((double)ContentLength / GB, 2);
suffix = nameof(GB);
}
else if (ContentLength >= MB)
{
size = Math.Round((double)ContentLength / MB, 2);
suffix = nameof(MB);
}
else if (ContentLength >= KB)
{
size = Math.Round((double)ContentLength / KB, 2);
suffix = nameof(KB);
}

return $"{size} {suffix}";
}
}
catch (Exception)
{
return "-";
}
return "-";
}

چگونه کار میکند ؟

تابع ابتدا با استفاده از کلاس System.Net.WebRequest از سرور، متد HEAD را درخواست می کند. سپس با استفاده WebResponse اطلاعات را دریافت کرده و سپس با استفاده از long.TryParse حجم فایل دریافتی از resp.Headers.Get("Content-Length")  را به long تبدیل میکند.

تابع TryParse تلاش میکند که تبدیل را انجام داده و در ContentLength قرار دهد. نتیجه TryParse همیشه bool بوده و باید حتما کنترل شود.


در داخل بدنه if در صورتی که تبدیل موفقیت آمیز باشد حجم فایل به صورت "کاربر پسند" بازگشت داده خواهد شد.
در صورتی که به این بخش نیاز ندارید در بدنه if تنها ContentLength را بازگشت دهید.

نحوه استفاده

برای استفاده از این تابع به صورت زیر عمل کنید.


string mysize = GetFileSize("لینک فایل");