原创文章,转载请注明出处,谢谢!
作者:清林,博客名:飞空静渡
这里说的NTFS卷的使用空间大小简单来说就是NTFS分区的使用空间大小,如果有些人看到这样就说:这太简单了,直接一个GetDiskFreeSpace或是GetDiskFreeSpaceEx的API就可以了啊,但在这里,我纯粹从文件系统角度来说的,就是不靠API直接计算NTFS分区的使用空间的大小,如果你只想一个API搞定,那么就不需要往下看了。
获取NTFS卷的使用空间的大小其实就是获取NTFS卷中所有文件的大小,当然也包括NTFS中的元文件。
一种方法是读取$Bitmap文件,然后直接读取$Bitmap文件各个位来计算整个卷的空间的使用大小,但如果你直接这么做的话,获取的使用空间的大小就不准确了,因为$Bitmap所标识的空间大小并不一定和整个卷的大小相符,其实往往是$Bitmap所表示的大小要超出整个卷的大小一些,因此,我们就有必要去截取这个$Bitmap,截取的方法是读取分区中的BPB参数来获取整个卷的大小,然后用这个大小去截取$Bitmap,似的$Bitmap所表示的大小和整个卷的大小相符合,这样计算得到的卷的使用空间的大小就比较接近了。
下面说一下第2种方法,这种方法是最准确获得卷使用空间大小的方法。
这里不想用文字来说,想用一段伪代码来说明,我觉得这样会清楚一些。
这里只是一个简单的算法,如果要实现还要处理被删除的文件和压缩、加密的文件等等。
这种方式获得NTFS卷的使用空间的大小是最准确的,也是linux系统下ntfs-3g获得分区使用空间大小的方法。