Форматирование результата TotalSize DriveInfo в C # - PullRequest
1 голос
/ 30 августа 2011

Итак, мы все знаем, что следующий код вернет long:

DriveInfo myDrive = new DriveInfo("C:\\");
long size = myDrive.TotalSize;
Console.WriteLine("Drive Size is: {0}", size);

Вывод будет примерно таким:

Размер диска: 114203439104

Так что я думаю, что это означает, что общий размер накопителя составляет около 114 гигабайт.

Однако я хочу получить это в следующем формате:

114,2 МБ

Есть ли действительно быстрый и простой способ сделать это?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 30 августа 2011

Я думаю, что это 114 ГБ, но эй. Во всяком случае, я бы написал вспомогательную функцию для этого. Что-то вроде ...

public string GetSize(long size)
{
   string postfix = "Bytes";
   long result = size;
   if(size >= 1073741824)//more than 1 GB
   {
      result = size / 1073741824;
      postfix = "GB";
   }
   else if(size >= 1048576)//more that 1 MB
   {
      result = size / 1048576;
      postfix = "MB";
   }
   else if(size >= 1024)//more that 1 KB
   {
      result = size / 1024;
      postfix = "KB";
   }

   return result.ToString("F1") + " " + postfix;
}

РЕДАКТИРОВАТЬ: Как указывалось, я полностью забыл иметь дело с размером (код исправлен)

1 голос
/ 30 августа 2011

Это фрагмент, который я использую:

    public static string FormatBytesToHumanReadable(long bytes)
    {
        if (bytes > 1073741824)
            return Math.Ceiling(bytes / 1073741824M).ToString("#,### GB");
        else if (bytes > 1048576)
            return Math.Ceiling(bytes / 1048576M).ToString("#,### MB");
        else if (bytes >= 1) 
            return Math.Ceiling(bytes / 1024M).ToString("#,### KB");
        else if (bytes < 0)
            return "";
        else
            return bytes.ToString("#,### B");
    }
0 голосов
/ 30 августа 2011

Я просто хочу добавить, что если вы говорите о размере диска, а не о размере чего-то другого, имейте в виду, что производители оборудования HDD / SDD используют 1000 для КБ, а не 1024. Вот почему HDD, помеченный как 400Gb, будет отображаться как 372,53 ГБ в большинстве программ. Убедитесь, что вы предоставляете своему пользователю информацию, которую он ожидает.

0 голосов
/ 30 августа 2011

Да. Повторное деление на 1024.

var kb = size/1024;
var mb = kb/1024;
...