Форматирование результата TotalSize DriveInfo в C #

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

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

Результат будет примерно таким:

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

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

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

114.2 MB

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

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


person bobble14988    schedule 30.08.2011    source источник
comment
См. stackoverflow.com/questions/128618/c-file- размер-формат-поставщик   -  person Mark Cidade    schedule 30.08.2011


Ответы (4)


Я думаю, что это 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;
}

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

person musefan    schedule 30.08.2011
comment
@Valerio, конечно ты прав, не могу поверить, что забыл об этой части :( - person musefan; 31.08.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");
    }
person ʞᴉɯ    schedule 30.08.2011

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

var kb = size/1024;
var mb = kb/1024;
person rtalbot    schedule 30.08.2011

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

person adontz    schedule 30.08.2011