Frage

Ich bin mit der Driveinfo-Klasse in meinem C # Projekt die verfügbaren Bytes auf bestimmten Laufwerken abzurufen. Wie ich richtig diese Zahl in Mega- oder Gigabytes konvertieren? Die Division durch 1024 wird die Arbeit ich denke nicht. Die Ergebnisse unterscheiden sich immer von den in den Windows-Explorer angezeigt.

War es hilfreich?

Lösung

1024 ist korrekt für die Verwendung in Programmen.

Der Grund, warum Sie Unterschiede aufweisen werden kann, ist aufgrund der Unterschiede in dem, was wahrscheinlich Driveinfo Berichte als „available space“ und welche Fenster hält Platzangebot.

Beachten Sie, dass nur die Hersteller 1000 verwenden Laufwerk. Innerhalb von Fenster und die meisten Programme die richtige Skalierung ist 1024.

Auch wenn die Compiler dies ohnehin optimieren sollen, kann diese Berechnung lediglich durch Verschieben des Bits durch 10 für jede Größenordnung durchgeführt werden:

  

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

Obwohl zur besseren Lesbarkeit I aufeinanderfolgende Teilung von 1024 erwarten ist klarer.

Andere Tipps

XKCD hat die definitive Antwort :

Single, endgültiger Standard für KB

/// <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 ist eigentlich falsch. Die International Engineering Gemeinschaft (IEC) hat einen Standard im Jahr 2000 entwickelt, die leider von der Computerindustrie ignoriert wird. Diese Norm besagt im Grunde, dass

  • 1000 Bytes ist ein Kilobyte, 1000KB ein MB ist und so weiter. Die Abkürzungen sind KB, MB, GB und so weiter.
  • Der weit verbreitete 1024 Byte = 1 Kilobyte sollte stattdessen durch genannt 1024 Byte = 1 Kibibyte (KiB), 1024 KiB = 1 Mebibyte (MiB), 1024 MiB = 1 Gibibyte (GiB) und so weiter.

Sie können es alle lesen auf der IEC SI Zone auf.

Also, um für Ihre Conversions korrekt und richtig sein nach dem internationalen Normung sollten Sie diese wissenschaftliche Schreibweise verwenden.

Es hängt davon ab, ob Sie die tatsächliche Dateigröße oder die Größe auf dem Datenträger werden sollen. Die tatsächliche Dateigröße ist die tatsächliche Anzahl von Bytes, die die Datei im Speicher verwendet. Die Größe auf der Festplatte ist eine Funktion der Dateigröße und die Blockgröße für Datenträger / Dateisystem.

Ich habe eine schwache Erinnerung, dass die Antwort darauf, ob 1000 oder 1024 liegt in dem Gehäuse des Präfix zu verwenden. Beispiel: Wenn die „wissenschaftliche“ 1000 Skalierung verwendet wird, dann ist die „wissenschaftliche“ Einheit wird kB (wie in kg, kN usw.). Wenn der Computer centric 1024 Skalierung verwendet wird, dann wird das Gerät KB sein. So großgeschrieben, die wissenschaftliche Präfix macht es Computer centric.

Divide by 1024.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top