Comment convertir correctement les fichiers en octets en Méga ou gigaoctets?
j'utilise la classe DriveInfo dans mon projet C# pour récupérer les octets disponibles sur des disques donnés. Comment convertir correctement ce nombre en Méga - ou gigaoctets? Diviser par 1024 ne fera pas le travail je suppose. Les résultats diffèrent toujours de ceux affichés dans L'Explorateur Windows.
7 réponses
1024 est correct pour l'utilisation dans les programmes.
la raison pour laquelle vous pouvez avoir des différences est probablement due à des différences dans ce que driveinfo déclare comme" espace disponible " et ce que windows considère espace disponible.
Notez que seuls les fabricants de disques utilisent 1 000. Dans windows et la plupart des programmes, la mise à l'échelle correcte est 1024.
aussi, bien que votre compilateur devrait l'optimiser de toute façon, ce calcul peut être fait par décalage de bits par 10 pour chaque grandeur:
KB = B > > 10
MB = KO > > 10 = B > > 20
GB = MB > > 10 = KB > > 20 = B >> 30
bien que pour la lisibilité Je m'attends à une division successive d'ici 1024 est plus claire.
/// <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"
1024 est en fait erroné. La communauté internationale de L'Ingénierie (IEC) a élaboré une norme en 2000, qui est malheureusement ignorée par l'industrie informatique. Cette norme dit essentiellement que
- 1000 octets est un kilo-octet, 1000KB sont un MO et ainsi de suite. Les abréviations sont KB, MB, GB et ainsi de suite.
- les 1024 octets = 1 kilo-octets largement utilisés devraient être remplacés par 1024 octets = 1 Kibioctet( KiB), 1024 KiB = 1 Mebioctet (MiB), 1024 MiB = 1 Gibioctet (GiB) et ainsi de suite.
Vous pouvez tous le lire sur le CEI SI la zone .
donc pour que vos conversions soient correctes et justes selon la standardisation internationale, vous devez utiliser cette notation scientifique.
cela dépend de si vous voulez la taille réelle du fichier ou la taille sur le disque. La taille réelle du fichier est le nombre réel d'octets dans le fichier en mémoire. La taille sur le disque est fonction de la taille du fichier et la taille de bloc de votre disque/système de fichiers.
j'ai un vague souvenir que la réponse à savoir s'il faut utiliser 1000 ou 1024 se trouve dans le boîtier du préfixe. Exemple: Si l'on utilise l'échelle" scientifique "1000, alors l'unité" scientifique " sera kB (comme en kg, kN, etc.). Si la mise à l'échelle informatique 1024 est utilisée, alors L'unité sera KB. Donc, en appuyant sur le préfixe scientifique, il est centré sur l'ordinateur.