void UTIL_CountFileSize(const char *dir, long &fsize)
{
#ifndef WIN32
    DIR *dp;
    struct dirent *entry;
    struct stat statbuf;
    
    if((dp = opendir(dir)) == NULL)
    {
        fprintf(stderr ,"cannot open dirctory : %s \n", dir);
        return ;
    }
    chdir(dir);//注意这里改变了工作路径
    while((entry = readdir(dp)) != NULL)
    {
        lstat(entry->d_name, &statbuf);
        if(S_ISDIR(statbuf.st_mode))
        {
            if(strcmp(".", entry->d_name) == 0 || strcmp("..", entry->d_name) == 0)
            {
                continue;
            }
            else
            {
                fsize += statbuf.st_size;
                UTIL_CountFileSize(entry->d_name, fsize);
            }
        }
        fsize += statbuf.st_size;
        
    }
    chdir("..");//needed 
    closedir(dp);
#else

char szFind[MAX_PATH];
    char szFileTemp[MAX_PATH];
    WIN32_FIND_DATA FindFileData;

strcpy(szFind,dir);
    strcat(szFind,"\\*.*");

int actcnt = MultiByteToWideChar(CP_ACP, NULL, szFind, -1, NULL, 0);
    TCHAR * pbuffer = new TCHAR[actcnt + 1];
    memset(pbuffer, 0, sizeof(pbuffer));
    MultiByteToWideChar(CP_ACP, NULL, szFind, -1, pbuffer, actcnt);

HANDLE hFind = ::FindFirstFile(pbuffer ,&FindFileData);
    if(INVALID_HANDLE_VALUE == hFind)   
        return;
   
    while(TRUE)
    {
        if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if(FindFileData.cFileName[0]!='.')
            {                                  
                DWORD dwMinSize = WideCharToMultiByte (CP_OEMCP, NULL, FindFileData.cFileName ,-1, NULL, 0, NULL, 0);
                char *cTemp =  new char[dwMinSize + 1];
                memset(cTemp, 0 , sizeof(cTemp));
                WideCharToMultiByte (CP_OEMCP, NULL, FindFileData.cFileName ,-1, cTemp, sizeof(FindFileData.cFileName)/sizeof(FindFileData.cFileName[0]), NULL, 0);
                sprintf(szFileTemp,"%s\\%s", dir, cTemp);                              
                UTIL_CountFileSize(szFileTemp,fsize);                
            }
        }
        else
        {
            fsize += (long) FindFileData.nFileSizeLow;            
        }
        if(!FindNextFile(hFind,&FindFileData))    break;
    }
    FindClose(hFind);

#endif
}

其中以下代码是 WCHAR 与 char * 之间的转换 (参考前一篇文章)

int actcnt = MultiByteToWideChar(CP_ACP, NULL, szFind, -1, NULL, 0);
    TCHAR * pbuffer = new TCHAR[actcnt + 1];
    memset(pbuffer, 0, sizeof(pbuffer));

MultiByteToWideChar(CP_ACP, NULL, szFind, -1, pbuffer, actcnt);

相反转换

DWORD dwMinSize = WideCharToMultiByte (CP_OEMCP, NULL, FindFileData.cFileName ,-1, NULL, 0, NULL, 0);
                char *cTemp =  new char[dwMinSize + 1];
                memset(cTemp, 0 , sizeof(cTemp));
                WideCharToMultiByte (CP_OEMCP, NULL, FindFileData.cFileName ,-1, cTemp, sizeof(FindFileData.cFileName)/sizeof(FindFileData.cFileName[0]), NULL, 0);

Linux 与 Windows 计算文件夹大小相关推荐

  1. Linux中查看各文件夹大小(扫盘)

    df -h ./ du -hs ./ du -h /ifs4/BC_RD/USER/lizhixin/my_project/human_chr22 | grep [[:digit:]+]G du [- ...

  2. linux按照目录大小降序排列,Linux du命令查看文件夹大小并按降序排列

    1. df -lh 2. du -s /usr/* | sort -rn 这是按字节排序 3. du -sh /usr/* | sort -rn 这是按兆(M)来排序 4.选出排在前面的10个 du ...

  3. linux du命令 前多少个,Linux du命令查看文件夹大小并按降序排列

    1. df -lh 2. du -s /usr/* | sort -rn 这是按字节排序 3. du -sh /usr/* | sort -rn 这是按兆(M)来排序 4.选出排在前面的10个 du ...

  4. Linux中查看各文件夹大小命令du -h --max-depth=1

    du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>] [--max-de ...

  5. Linux查看当前文件目录文件夹大小 (附:Linux文件文件夹大小查看全集)

    1.查看当前文件目录各个文件夹大小 du -h --max-depth=1 查看指定目录  du -h --max-depth=1 /path 2. 查看当前目录下所有目录及子目录大小 du -h - ...

  6. Python 计算文件夹大小、文件大小

    1.获取文件夹的文件 import os pathvar=r'D:\pycharm project\day17' lst=os.listdir(pathvar) print(lst) 2.计算文件的大 ...

  7. linux下限制一个文件夹大小的方法

    linux上有时由于一些特殊的用途,我们需要限制一个文件夹的大小.核心方法都是把需要限制的文件夹挂载在一个大小固定的分区上,下面有两种方法可以实现: 使用ramdisk linux可以把一部分内存mo ...

  8. linux添加windows字体文件夹里,如何把Windows下的字体添加到Linux中

    如何把Windows下的字体添加到Linux中 Linux(Fedora/Ubuntu/CentOS)的字体实在不尽如人意,而且在网页及文档显示时很多字无法显示出来,特别多的空白和乱码,其实,我们可以 ...

  9. Linux系统查看各文件夹大小的命令du -lh命令

    du -lh --max-depth=1 查看各文件夹大小的命令. -l:-count-links重复计算硬件连接的文件. -h:-human-readable,以K,M,G为单位,提高信息可读性. ...

  10. linux如何查询一个文件夹大小,Linux下如何查看某个文件夹所占空间大小

    Linux下的du命令可以查看某个目录或者文件所占空间大小. 基础知识: 命令参数: -a或-all 显示目录中个别文件的大小. -b或-bytes 显示目录或文件大小时,以byte为单位. -c或- ...

最新文章

  1. 新闻系统粗略说明文档
  2. 强化学习和最优控制的《十个关键点》81页PPT汇总
  3. 赤峰市职称计算机,关注丨赤峰今年评职称最新政策全在这……
  4. django配置数据驱动,python安装失败问题
  5. python wx提示框字体_使用wxStyledTextCtrl实现代码提示
  6. Linux下查看/管理当前登录用户及用户操作历史记录
  7. 1,windows java环境搭建,eclipse安装、tomcat配置,快速创建jsp页面
  8. cglib和jdk动态代理以及 按指定顺序排列list
  9. [日推荐] 『地铁查询』全国地铁尽在手中,不怕迷路!
  10. 无人机计算机模拟飞行,学习无人机,怎么安装无人机模拟器?
  11. 三菱Q协议PLC TCP/IP通讯协议解析简述
  12. 解决微信插件wxparse图片大小不能改变的问题
  13. 计算机教育主编在线审查,大学计算机基础教程-王慧儒主编.pdf
  14. 使用Docker容器来搭建LNMP(Nginx+Mysql+php)+Wordpress
  15. (批处理)批量文件夹重命名,要求是在原文件夹名前加上英文字母前缀aa
  16. android 下划线跟文字一样长,TextView 下划线 自动根据文字内容改变长度
  17. 前端阿里矢量图的使用步骤
  18. bistuacm 2019年第六场新生训练赛题解
  19. 王牌竞速服务器维护,王牌竞速攻略大全 新手入门少走弯路[多图]
  20. 《利用Python 进行数据分析》第八章:绘图和可视化

热门文章

  1. C# 中,利用 Conditional 定义条件方法
  2. vue-router传递参数的两种方式
  3. MySQL 中while loop repeat 的基本用法
  4. 关于http-server的备选方案-- browser-sync
  5. 黑客伦理(hacker ethic)--《黑客与画家》
  6. PE格式第八讲,TLS表(线程局部存储)
  7. Linux网络编程--socket
  8. c# 安装和卸载服务(window service)
  9. 最短路径算法之四——SPFA算法
  10. 学习:SQL Server的复合索引学习(转)