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

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

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

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

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

  • 写回答

1条回答 默认 最新

  • Valtava 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;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加