Я использую класс 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 будет более четким.
Ответ 2
XKCD имеет определенный ответ:
Ответ 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.