Как правильно преобразовать размер файла в байтах в мега или гигабайт?

Я использую класс DriveInfo в моем проекте С# для получения доступных байтов на данных дисках. Как правильно преобразовать это число в Mega- или Gigabytes? Разделение на 1024 не будет выполнять работу, я думаю. Результаты всегда отличаются от результатов, показанных в Windows-Explorer.

Ответ 1

1024 подходит для использования в программах.

Причина, по которой у вас могут быть различия, вероятно, связана с различиями в том, что сообщает driveinfo как "доступное пространство" и какие окна рассматривают доступное пространство.

Обратите внимание, что только производители дисков используют 1000. Внутри окон и большинства программ правильное масштабирование составляет 1024.

Кроме того, хотя ваш компилятор должен в любом случае оптимизировать его, этот расчет может быть выполнен путем простого смещения битов на 10 для каждой величины:

KB = B → 10
MB = KB → 10 = B → 20
GB = MB → 10 = KB → 20 = B → 30

Хотя для читаемости я ожидаю, что последовательное деление на 1024 будет более четким.

Ответ 3

/// <summary>
/// Function to convert the given bytes to either Kilobyte, Megabyte, or Gigabyte
/// </summary>
/// <param name="bytes">Double -> Total bytes to be converted</param>
/// <param name="type">String -> Type of conversion to perform</param>
/// <returns>Int32 -> Converted bytes</returns>
/// <remarks></remarks>
public static double ConvertSize(double bytes, string type)
{
    try
    {
        const int CONVERSION_VALUE = 1024;
        //determine what conversion they want
        switch (type)
        {
            case "BY":
                 //convert to bytes (default)
                 return bytes;
                 break;
            case "KB":
                 //convert to kilobytes
                 return (bytes / CONVERSION_VALUE);
                 break;
            case "MB":
                 //convert to megabytes
                 return (bytes / CalculateSquare(CONVERSION_VALUE));
                 break;
            case "GB":
                 //convert to gigabytes
                 return (bytes / CalculateCube(CONVERSION_VALUE));
                 break;
            default:
                 //default
                 return bytes;
                 break;
          }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
         return 0;
      }
}

/// <summary>
/// Function to calculate the square of the provided number
/// </summary>
/// <param name="number">Int32 -> Number to be squared</param>
/// <returns>Double -> THe provided number squared</returns>
/// <remarks></remarks>
public static double CalculateSquare(Int32 number)
{
     return Math.Pow(number, 2);
}


/// <summary>
/// Function to calculate the cube of the provided number
/// </summary>
/// <param name="number">Int32 -> Number to be cubed</param>
/// <returns>Double -> THe provided number cubed</returns>
/// <remarks></remarks>
public static double CalculateCube(Int32 number)
{
     return Math.Pow(number, 3);
}

//Sample Useage
String Size = "File is " + ConvertSize(250222,"MB") + " Megabytes in size"

Ответ 4

1024 на самом деле ошибочно. Международное инженерное сообщество (МЭК) разработало стандарт в 2000 году, который, к сожалению, игнорируется компьютерной промышленностью. Этот стандарт в основном говорит о том, что

  • 1000 байтов - килобайт, 1000 КБ - один МБ и т.д. Аббревиатуры - это KB, MB, GB и т.д.
  • Широко используемый 1024 байта = 1 килобайт должен вместо этого иметь 1024 байта = 1 Kibibyte (KiB), 1024 KiB = 1 Mebibyte (MiB), 1024 MiB = 1 Gibibyte (GiB) и т.д.

Вы все можете прочитать его на зоне IEC SI.

Итак, чтобы ваши преобразования были правильными и правильными в соответствии с международной стандартизацией, вы должны использовать эту научную нотацию.

Ответ 5

Это зависит от того, хотите ли вы фактический размер файла или размер на диске. Фактический размер файла - это фактическое количество байтов, которое файл использует в памяти. Размер на диске зависит от размера файла и размера блока для вашей дисковой/файловой системы.

Ответ 6

У меня слабое воспоминание о том, что ответ на вопрос, следует ли использовать 1000 или 1024, лежит в оболочке префикса. Пример: Если используется "научное" 1000 масштабирование, то "научным" единицей будет kB (как и в килограммах, кН и т.д.). Если используется масштабирование в масштабе компьютера 1024, тогда единица будет KB. Таким образом, верхний префикс научного префикса делает его ориентированным на компьютер.

Ответ 7

Разделить на 1024.