文件属性中“大小”和“占用空间”的区别

标签: , ,

很多人一直在困惑,一个文件或文件夹属性中的“大小(Size)”和“占用空间(Size on disk)”通常不相互匹配。“大小”的值表示文件实际大小的字节数,而“占用空间”的值表文件占用硬盘空间大小的字节数。

这种差异来自文件系统在驱动器上存储的文件的方式。为了减少使用的地址数量,文件系统把一定数量的字节当成簇。根据不同的文件系统,常见的簇大小可以从2KB的到32KB。一个被写入到磁盘的文件需要占用若干个不相连的簇,而无论文件的实际大小。因此,一个1KB的文件,保存在一个簇大小为2KB的文件系统将占用2KB,但保存在一个簇大小为32KB的文件系统,它会占用32KB。也就是说,一个33KB的文件将占用17个2KB的簇(34KB)或2个32KB的簇(64KB)。

基于上述的讨论,你会期望占用空间的大小会比实际大小更大,但是多出的部分不会超过一个簇的大小。在查看一个有很多文件的文件夹时,这种差异可能会更大,因为每个单独文件浪费的空间加起来会体现在文件夹上。

简单地说,就是:

  1. “大小”是文件的实际字节数,而“占用空间”的是在磁盘上占用的字节数。
  2. “占用空间”通常比“大小”要大,但也可以和“大小”一样

公式(JavaScript描述):

//簇大小,一般为4KB
var cluster = 4096;
//文件大小,单位为字节
var size = 4282661;
//占用大小,单位为字节
var size_on_disk = 
Math.ceil(size / cluster) * cluster;
//回显
WScript.Echo(size_on_disk);

参考链接:Difference Between Size vs Size on Disk

随机文章:

  1. WMI入门教程:第一部分
  2. 用VBS精确计算2的100次方
  3. OpenTextFile与Unicode
  4. OpenWrt搭建KMS服务器激活Windows和Office
  5. 开机弹出脚本错误对话框

6 条评论 发表在“文件属性中“大小”和“占用空间”的区别”上

  1. linkanyway说道:

    //簇大小,一般为4KB
    var cluster = 4096;
    //文件大小,单位为字节
    var size = 4097
    //占用大小,单位为字节
    var size_on_disk = Math.ceil(size / cluster) * cluster;
    //回显
    WScript.Echo(size_on_disk);

    复杂又显得NB的实在想不出就这用算了。。。好不好。。。要不你来想吧
    http://blog.linkanyway.com/post/2010/11/29/filesizeondisk.aspx

  2. linkanyway说道:

    要不你写个正则!!再搞个string.split…分组判断。。。还是觉得不够牛。。要不用火星文吧。

  3. 伊风在哭泣说道:

    这个是文件系统的知识啦

  4. azziporah说道:

    好强大的域名 – -b
    这个size的问题在NTFS下会更加复杂……
    因为有resident file和sparse file
    也许还有the infamous ADS

留下回复