zoukankan      html  css  js  c++  java
  • C++ 文件大小格式化

     1 #include <iostream>
     2 #include <windows.h>
     3 using namespace std;
     4
     1 /*文件大小格式化
     2  *param [in] dwSize   xx.xxB 、xx.xxKb 、xx.xxM
     3  */
     4 
     5 LPCTSTR CFileUtil::FileSizeToFormat(DWORD dwSize)
     6 {
     7     TCHAR* strSize = new TCHAR[20];
     8     ZeroMemory(strSize,sizeof(TCHAR) * 20);
     9 
    10     double i = pow((double)2,10);
    11 
    12     if (dwSize < pow((double)2,10))//dwSize < 1024
    13     {
    14         _stprintf_s(strSize,20,TEXT("%dB"),dwSize);//文件大小 B
    15     }
    16     else if (pow((double)2,10) <= dwSize &&  dwSize< pow((double)2,20))// 1024 <= dwSize < 1024*1024
    17     {
    18         float fSize = (float)(dwSize*100/1024)/100;
    19         _stprintf_s(strSize,20,TEXT("%.2fKB"),fSize);
    20     }
    21     else if (pow((double)2,20) <= dwSize && dwSize < pow((double)2,30))// 1024*1024 <= dwSize < 1024*1024*1024
    22     {
    23         float fSize = (float)(dwSize/1024*100/1024)/100;
    24         _stprintf_s(strSize,20,TEXT("%.2fM"),fSize);//文件大小 M
    25     }
    26     else if (pow((double)2,30) <= dwSize && dwSize < pow((double)2,40)) // 1024*1024*1024 <= dwSize < 1024*1024*1024*1024
    27     {
    28         float fSize = (float)(dwSize/1024*100/1024/1024)/100;
    29         _stprintf_s(strSize,20,TEXT("%.2fG"),fSize);//文件大小 G 
    30     }
    31     else
    32     {
    33         float fSize = (float)(dwSize/1024*100/1024/1024/1024)/100;
    34         _stprintf_s(strSize,20,TEXT("%.2fT"),fSize);//文件大小 T
    35     }
    36     
    37     return strSize;
    38 }
     5 
     6 /*根据文件大小进行格式化
     7 *@[in ]  llBytes    文件的长度(B)
     8 *@[out]  pszSize    缓冲区
     9 *@[in ]  clen       缓冲区长度
    10 */
    11 
    12 BOOL FileSizeToStringA(LONGLONG llBytes, char* pszSize, DWORD cLen)
    13 {
    14     double bytes = (double)llBytes;
    15     DWORD cIter = 0;    
    16     char* pszUnits[] = { ("B"), ("KB"), ("MB"), ("GB"), ("TB") };
    17     DWORD cUnits = sizeof(pszUnits) / sizeof(pszUnits[0]);
    18 
    19     // move from bytes to KB, to MB, to GB and so on diving by 1024
    20     while(bytes >= 1024 && cIter < (cUnits-1))
    21     {
    22         bytes /= 1024;
    23         cIter++;
    24     }
    25     _snprintf_s(pszSize, cLen, _TRUNCATE,("%.2f %s"), bytes, pszUnits[cIter]);
    26     return TRUE;
    27 }
    28 
    29 int main()
    30 {
    31     char szText[256];
    32     FileSizeToStringA(23156,szText,256);
    33 
    34     cout << "szText:" << szText << endl;
    35 
    36     getchar();
    37     return 0;
    38 }
  • 相关阅读:
    Hologres如何支持亿级用户UV计算
    飞猪基于 Serverless 的云+端实践与思考
    高德打车构建可观测性系统实践
    程序员写好技术文章的几点小技巧
    配置审计(Config)变配报警设置
    进入中国内地第31年的麦当劳 ,为什么还能不断吸引新消费人群?
    OceanBase再破纪录!核心成员陈萌萌:坚持HTAP就是坚持我们做数据库的初心
    找出有序数组中缺失的数字
    删除值重复的结点
    想交链表----若有缘 必相见
  • 原文地址:https://www.cnblogs.com/chechen/p/4378508.html
Copyright © 2011-2022 走看看