如何获取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种方法,这种方法是最准确获得卷使用空间大小的方法。
这里不想用文字来说,想用一段伪代码来说明,我觉得这样会清楚一些。
这里只是一个简单的算法,如果要实现还要处理被删除的文件和压缩、加密的文件等等。
这种方式获得NTFS卷的使用空间的大小是最准确的,也是linux系统下ntfs-3g获得分区使用空间大小的方法。
作者:清林,博客名:飞空静渡
这里说的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获得分区使用空间大小的方法。
相关文章推荐
- 如何获取手机sd可用空间大小和手机内存可用空间大小
- 用来获取sd卡和系统/data分区的使用情况,包括:总的空间大小、可用空间、已用空间
- iOS中使用c函数快速获取一个目录所占的空间大小
- 如何获取MSSQLServer的库空间大小
- 如何用 SQL 语句获取某个 ACCESS 表占用的磁盘空间大小?
- 求助,如何使用批处理命令查询本机有几个盘,然后每个盘总大小空间和可用大小空间,然后将这些信息生成一个文档,求高手指教,谢谢。
- 如何查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件
- ORACLE如何使用DBMS_METADATA.GET_DDL获取表,表空间,用户,视图等的DDL语句
- 又拍云常见使用问题(如何获取图片类空间的文件信息)
- 使用Delphi获取一个文件夹所占空间大小
- ORACLE如何使用DBMS_METADATA.GET_DDL获取表,表空间,用户,视图等的DDL语句
- 如何获取一个Class在GC在的空间大小
- 如何获取SOCKET 发送缓冲区使用大小
- Android 如何获取手机内存大小,内置存储空间大小
- iOS中使用c函数快速获取一个目录所占的空间大小
- iOS中使用c函数快速获取一个目录所占的空间大小
- ios 如何获取手机可用空间和总的存储空间的大小
- linux获取U盘可用空间大小,U盘大小——statfs的使用
- 使用IOCTL_DISK_GET_LENGTH_INFO控制码获取磁盘空间大小
- 通过查询Android系统setting源代码掌握如何获取SD卡大小和可用空间