您的位置:首页 > 其它

如何获取NTFS卷的使用空间大小

2010-04-16 17:05 218 查看
原创文章,转载请注明出处,谢谢!

作者:清林,博客名:飞空静渡

这里说的NTFS卷的使用空间大小简单来说就是NTFS分区的使用空间大小,如果有些人看到这样就说:这太简单了,直接一个GetDiskFreeSpace或是GetDiskFreeSpaceEx的API就可以了啊,但在这里,我纯粹从文件系统角度来说的,就是不靠API直接计算NTFS分区的使用空间的大小,如果你只想一个API搞定,那么就不需要往下看了。

获取NTFS卷的使用空间的大小其实就是获取NTFS卷中所有文件的大小,当然也包括NTFS中的元文件。

一种方法是读取$Bitmap文件,然后直接读取$Bitmap文件各个位来计算整个卷的空间的使用大小,但如果你直接这么做的话,获取的使用空间的大小就不准确了,因为$Bitmap所标识的空间大小并不一定和整个卷的大小相符,其实往往是$Bitmap所表示的大小要超出整个卷的大小一些,因此,我们就有必要去截取这个$Bitmap,截取的方法是读取分区中的BPB参数来获取整个卷的大小,然后用这个大小去截取$Bitmap,似的$Bitmap所表示的大小和整个卷的大小相符合,这样计算得到的卷的使用空间的大小就比较接近了。

下面说一下第2种方法,这种方法是最准确获得卷使用空间大小的方法。

这里不想用文字来说,想用一段伪代码来说明,我觉得这样会清楚一些。

......
dwlTotalUsed = 0;
unsigned long long i ;
//遍历MFT表中的每一个记录文件,dwlMFTCount是MFT中的文件记录数
for(i=0; i< dwlMFTCount; ++i)
{
for(遍历记录中的每个属性)
{
if (属性是非常驻属性)
dwlTotalUsed += 非常驻属性的数据大小;
}
}
......


这里只是一个简单的算法,如果要实现还要处理被删除的文件和压缩、加密的文件等等。

这种方式获得NTFS卷的使用空间的大小是最准确的,也是linux系统下ntfs-3g获得分区使用空间大小的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐