如何正确地将文件大小字节转换为兆字节或千兆字节?

我在我的C#项目中使用DriveInfo类来检索给定驱动器上的可用字节。 如何正确地将此数字转换为兆字节或千兆字节? 除以1024将无法完成这项工作。 结果总是与Windows资源管理器中显示的结果不同。

1024对于程序中的使用是正确的。

您可能存在差异的原因可能是由于driveinfo报告为“可用空间”以及Windows认为可用空间的差异。

请注意,只有驱动器制造商使用1,000。 在Windows和大多数程序中,正确的缩放是1024。

此外,虽然您的编译器无论如何都应该优化它,但是这个计算可以通过仅为每个幅度移位10来完成:

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

虽然为了便于阅读,我预计连续除以1024会更清楚。

XKCD有明确的答案 :

KB的单一,明确标准

 ///  /// Function to convert the given bytes to either Kilobyte, Megabyte, or Gigabyte ///  /// Double -> Total bytes to be converted /// String -> Type of conversion to perform /// Int32 -> Converted bytes ///  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; } } ///  /// Function to calculate the square of the provided number ///  /// Int32 -> Number to be squared /// Double -> THe provided number squared ///  public static double CalculateSquare(Int32 number) { return Math.Pow(number, 2); } ///  /// Function to calculate the cube of the provided number ///  /// Int32 -> Number to be cubed /// Double -> THe provided number cubed ///  public static double CalculateCube(Int32 number) { return Math.Pow(number, 3); } //Sample Useage String Size = "File is " + ConvertSize(250222,"MB") + " Megabytes in size" 

1024实际上是错误的。 国际工程界(IEC)在2000年制定了一项标准,令人遗憾地被计算机行业所忽视。 这个标准基本上就是说

  • 1000字节是千字节,1000KB是1 MB,依此类推。 缩写为KB,MB,GB等。
  • 广泛使用的1024字节= 1千字节应该被称为1024字节= 1 Kibibyte(KiB),1024 KiB = 1 Mebibyte(MiB),1024 MiB = 1 Gibibyte(GiB)等等。

您可以在IEC SI区域读取它们。

因此,为了使您的转换正确且符合国际标准化,您应该使用此科学记数法。

这取决于您是否需要实际文件大小或磁盘大小。 实际文件大小是文件在内存中使用的实际字节数。 磁盘上的大小是磁盘/文件系统的文件大小和块大小的函数。

我有一个微弱的回忆,关于是否使用1000或1024的答案位于前缀的大小写。 示例:如果使用“科学”1000缩放,则“科学”单位将为kB(与kg,kN等一样)。 如果使用以计算机为中心的1024缩放,则单位将为KB。 因此,高估科学前缀使其以计算机为中心。

除以1024。