【发布时间】:2017-02-03 10:26:43
【问题描述】:
什么是用于将字节转换为 MB 的 windows converion?
我的文件夹的计算大小是(1,568,653,060 字节)
// 1.
// Get array of all file names.
string[] a = Directory.GetFiles(path, "*.*");
// 2.
// Calculate total bytes of all files in a loop.
long b = 0;
foreach (string name in a)
{
// 3.
// Use FileInfo to get length of each file.
FileInfo info = new FileInfo(name);
b += info.Length;
}
//b = 1568653060
//However, googles conversion...convert 1568653060 bytes to mb
//returns
//1568653060 b = 1568.65306 mb
但根据我的计算
// Return total size in MB int
float mbValue = (b / 1024f) / 1024f;
//mbValue = 1495.98413
//should return 1496 mb
但是窗口返回....
大小:1.45 GB(1,568,653,060 字节)
磁盘大小:1.46 GB(1,568,686,080 字节)
//将此转换为 MB 给我 1460 MB....
另外 36Mb 是从哪里来的?
我只需要它是准确的......我应该坚持哪种方法?
设置用户文件上传限制
【问题讨论】:
-
当你说 "windows 返回..." 我假设你的意思是 File Explorer。在这种情况下:How does Explorer calculate “Size on disk”?、How does Explorer calculate the folder size information in the folder tooltip?、Why can’t Explorer decide what size a file is?。
-
对我来说 1,568,653,060 / 1024/1024 = 1495.98 - 所以它向下舍入 google 使用的是 1000 而不是 1024。
-
曾几何时,有人认为有必要区分 Mega (1.000.000) 和 Mebi (2^20) 字节。这导致一些人认为使用 1.000 作为表示字节的因子而不是公认的 1024 (2^10) 是明智的。如果您不想让人们嘲笑您,请坚持使用 1024。
-
@ManfredRadlwimmer 我在哪里用过 1000?...float mbValue = (b / 1024f) / 1024f;...google 只是作为一个例子,Q 是为什么我的计算不同于windows文件资源管理器
-
@John Goggle 使用 1000(如果您指定 MB 而不是 MiB),您使用 1024,额外的 MB 来自每个文件,四舍五入到磁盘上的下一个完整段(这就是为什么 Size 和磁盘大小不同)
标签: c# windows filesize fileinfo