tamaño saber obtener net length informacion info fecha esta detalles creacion como bytes archivo abierto c# byte disk driveinfo megabyte

saber - obtener informacion de un archivo c#



¿Cómo convertir correctamente el tamaño del archivo en bytes en mega o gigabytes? (7)

Estoy usando la clase DriveInfo en mi proyecto C # para recuperar los bytes disponibles en unidades determinadas. ¿Cómo convierto correctamente este número en Mega o Gigabytes? Dividir por 1024 no hará el trabajo, supongo. Los resultados siempre difieren de los que se muestran en el Explorador de Windows.


1024 está realmente mal. La International Engineering Community (IEC) ha desarrollado un estándar en 2000, que lamentablemente está siendo ignorado por la industria informática. Este estándar básicamente dice que

  • 1000 bytes es un kilobyte, 1000 KB son un MB y así sucesivamente. Las abreviaturas son KB, MB, GB, etc.
  • El ampliamente usado 1024 bytes = 1 kilobyte debería llamarse 1024 bytes = 1 Kibibyte (KiB), 1024 KiB = 1 Mebibyte (MiB), 1024 MiB = 1 Gibibyte (GiB) y así sucesivamente.

Todos pueden leerlo en la zona IEC SI .

Entonces, para que sus conversiones sean correctas y correctas de acuerdo con la estandarización internacional, debe usar esta notación científica.


Depende de si desea el tamaño real del archivo o el tamaño en el disco. El tamaño real del archivo es la cantidad real de bytes que el archivo usa en la memoria. El tamaño en el disco depende del tamaño del archivo y del tamaño del bloque para su disco / sistema de archivos.


Divide por 1024.


1024 es correcto para el uso en programas.

La razón por la que puede tener diferencias es probable debido a las diferencias en lo que driveinfo informa como "espacio disponible" y qué ventanas consideran espacio disponible.

Tenga en cuenta que solo los fabricantes de unidades usan 1,000. Dentro de las ventanas y en la mayoría de los programas, la escala correcta es 1024.

Además, aunque su compilador debería optimizar esto de todos modos, este cálculo se puede hacer simplemente cambiando los bits por 10 para cada magnitud:

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

Aunque para la legibilidad espero que la división sucesiva en 1024 sea más clara.


Tengo un leve recuerdo de que la respuesta sobre si usar 1000 o 1024 se encuentra en la carcasa del prefijo. Ejemplo: Si se usa la escala "científica" 1000, entonces la unidad "científica" será kB (igual que en kg, kN, etc.). Si se usa la escala 1024 centrada en la computadora, entonces la unidad será KB. Por lo tanto, usar el prefijo científico en mayúsculas lo hace centrado en la computadora.


/// <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"