代码中刚开始用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;
}
可以取到实际大小。