取文件夹大小

  代码中刚开始用stat的st_size来取文件夹大小,因为没有子目录,只取了一层,单位MB, 代码如下:

        struct stat statbuf;
		stat(folder.c_str(), &statbuf);
		float filesize = (float)(statbuf.st_size) / 1024;
		DLOG("filesize={}", filesize);
		return filesize;

  实际使用时发现文件夹已经2G了,取出来只有1400M的样子,一查发现stat命令返回的是文件的字节数,而不是实际在磁盘上占用的大小。

  修改代码使用直接使用了du命令,代码如下:

            char arrDu[256];

			char line[256];
			char size[10];
			char path[256];
			char* p;

			FILE* fp = popen(arrDu, "r");
			if (fp == NULL)
			{
				return 0;
			}

			bool bRet = false;

			while (!feof(fp))
			{
				if (fgets(line, sizeof(line), fp) != NULL)
				{
					if ((p = strstr(line, folder.c_str())) != NULL)
					{
						int nRet = sscanf(line, "%s %s", size, path);
						if (nRet == 2)
						{
							bRet = true;
							break;
						}
					}
				}
			}

			pclose(fp);

			if (bRet)
			{
				uint32_t sizeM = atol(size) / 1024;
				DLOG("{} : sizeM={} path={}", arrDu, sizeM, path);
				return sizeM;
			}

   可以取到实际大小。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值