hiloves 2016-05-21 02:40 采纳率: 0%
浏览 1441

如何用C++取文件占用空间?

微软有没有API能取文件占用空间,请好像在文件属性中显示的“文件大小”“文件占用空间”?

有一个方案是用GetDiskFreeSpace先取分区的簇大小,再根据簇大小和GetCompressedFileSize得到的文件大小计算出文件的占用空间。

但这个方案有个缺点,在NTFS中如果是小文件,比如只有100字节,这个文件是不占用簇的,文件内容是直接保存在$MFT中的文件元数据区中,所以它的占用空间是0。用上面这个方案算出来的占用空间却是一个簇的大小。

  • 写回答

1条回答 默认 最新

  • 「已注销」 2016-05-21 07:53
    关注

    下面是 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;
    }
    
    评论

报告相同问题?