问题描述
- 如何用C++取文件占用空间?
-
微软有没有API能取文件占用空间,请好像在文件属性中显示的“文件大小”“文件占用空间”?有一个方案是用GetDiskFreeSpace先取分区的簇大小,再根据簇大小和GetCompressedFileSize得到的文件大小计算出文件的占用空间。
但这个方案有个缺点,在NTFS中如果是小文件,比如只有100字节,这个文件是不占用簇的,文件内容是直接保存在$MFT中的文件元数据区中,所以它的占用空间是0。用上面这个方案算出来的占用空间却是一个簇的大小。
解决方案
下面是 http://www.cplusplus.com/doc/tutorial/files/ 的代码,以binary方式打开文件,通过seekg和tellg获取文件大小(以Byte为单位)
// obtaining file size
#include <iostream>
#include <fstream>
using namespace std;
int main () {
streampos begin,end;
ifstream myfile ("example.bin", ios::binary);
begin = myfile.tellg();
myfile.seekg (0, ios::end);
end = myfile.tellg();
myfile.close();
cout << "size is: " << (end-begin) << " bytes.n";
return 0;
}
时间: 2024-07-28 16:20:08