当前位置: 首页 > news >正文

c++怎么获取文件的压缩比例信息_GetCompressedFileSize应用【实战】

GetCompressedFileSize返回的是NTFS压缩后磁盘占用字节数,非压缩比例;须先用GetFileAttributes检查FILE_ATTRIBUTE_COMPRESSED标志,否则结果无意义,且对非NTFS卷、加密或稀疏文件行为未定义。GetCompressedFileSize 返回值比实际大?先确认文件是否真被压缩这个函数不返回“压缩比例”,它只返回 NTFS 压缩后文件在磁盘上占用的字节数(即“压缩后的逻辑大小”),和 GetFileSize 返回的原始大小对比才能算出比例。但很多人直接拿 GetCompressedFileSize 结果当“压缩后体积”,结果发现比原始大小还大——那说明文件根本没被 NTFS 压缩,或者压缩失败了。必须先用 GetFileAttributes 检查 FILE_ATTRIBUTE_COMPRESSED 标志是否置位,否则 GetCompressedFileSize 的返回值无意义该函数对非 NTFS 卷(如 FAT32、exFAT、网络共享)总是返回原始大小,不报错也不提示对加密文件(FILE_ATTRIBUTE_ENCRYPTED)或稀疏文件,行为未定义,建议跳过GetCompressedFileSize 在 Windows 10/11 上返回错误?检查调用方式常见错误是传入了无效句柄或忽略错误码。它不抛异常,只靠返回值和 GetLastError() 判断成败。必须用 CreateFile 以 GENERIC_READ 权限打开,且不能带 FILE_FLAG_NO_BUFFERING(否则返回 0 + ERROR_INVALID_PARAMETER)返回值为 INVALID_FILE_SIZE(即 0xFFFFFFFF)时,立刻调 GetLastError():常见是 ERROR_ACCESS_DENIED(权限不足)、ERROR_SHARING_VIOLATION(文件被独占打开)64 位程序注意:函数原型返回 DWORD,但实际高位可能存于 lpFileSizeHigh 输出参数,必须用双参数重载版本 GetCompressedFileSizeEx(Windows 8+)或自己拼 LARGE_INTEGER怎么算出真正的压缩比例?别直接除比例不是简单用 GetCompressedFileSize 除以原始大小。NTFS 压缩按簇(cluster)对齐,小文件即使压缩后只剩几十字节,也可能占满一个簇(比如 4KB),导致比例失真。原始大小用 GetFileSizeEx 获取 LARGE_INTEGER,避免 32 位截断压缩后大小也必须用 GetCompressedFileSizeEx(推荐)或正确处理高低 32 位若原始大小为 0,比例无定义;若压缩后大小 ≥ 原始大小,说明未压缩或压缩膨胀(如已加密/高熵数据),此时比例应视为 1.0示例计算逻辑:double ratio = (double)compressedSize / (double)originalSize;if (compressedSize >= originalSize || originalSize == 0) ratio = 1.0;替代方案:为什么有时 GetCompressedFileSize 不够用它只反映 NTFS 文件系统级压缩,对 ZIP、7z 等应用层压缩包完全无效——你拿到的只是 ZIP 文件自身的大小,不是里面内容的压缩率。 WisPaper 复旦大学研发的AI学术搜索工具,5分钟内筛选1000篇论文

http://www.jsqmd.com/news/669177/

相关文章:

  • card.io-iOS-SDK高级配置指南:自定义UI与国际化最佳实践
  • Connexion高级特性探索:10个提升开发效率的隐藏功能
  • new.css革命性CSS框架:如何在5分钟内用纯HTML创建现代化网站
  • 终极指南:如何使用Molecule生成专业级Ansible测试报告
  • 如何配置Oracle UTL_FILE目录_CREATE DIRECTORY语法与权限分配
  • AnyIO:跨平台异步并发框架的终极指南
  • Path of Building 2:流放之路2角色规划器的3大核心功能与5步上手指南
  • 06华夏之光永存:黄大年茶思屋榜文解题总结篇——五题解绑对华为的全域价值重构
  • 生产环境SQL如何动态控制窗口的计算范围
  • 终极指南:Paints-UNDO与WD14 Tagger完美结合,3步自动生成AI绘图提示词
  • 如何格式化SQL查询输出结果_使用CONCAT拼接展示信息
  • 终极指南:如何用3D-ResNets-PyTorch快速搭建动作识别模型
  • 告别裸写I2C!在Keil C51中优雅驱动PCF8591的几种方法对比
  • VidBee常见问题解决方案:从安装到使用的一站式排错指南
  • lite-server实战:如何快速搭建Angular项目的热重载开发环境
  • 开源逻辑分析器LogicAnalyzer:数字信号调试的终极指南
  • 终极指南:如何使用mononoki编程字体和字体子集化技术优化Web应用性能
  • 原神帧率解锁终极完整指南:如何简单快速突破60fps限制
  • 为什么选择3D-ResNets-PyTorch?5大优势解析动作识别新范式
  • 华为面试挂了!48 核 CPU 瞬间飙到 100%,排查不出死锁,面试官:你确定你是 Java 专家?
  • 用位掩码实现 Harness 的权限快速校验
  • Que常见问题解答:解决作业丢失、死锁和性能瓶颈的终极方案
  • 终极RevokeMsgPatcher防撤回工具完整使用指南:快速掌握消息拦截技巧
  • 从规范到实现:如何基于php-langspec开发PHP编译器
  • Windows Cleaner终极指南:免费开源解决C盘爆红和系统卡顿问题
  • JavaScript中Nodejs环境内存限制与V8堆大小调整
  • 终极jsqrcode实战教程:构建企业级QR码扫描应用的完整方案
  • 终极指南:如何使用Greys Anatomy时间隧道(tt)功能轻松记录和回放Java方法执行
  • HS2-HF_Patch完整架构解析:BepInEx插件框架深度实践指南
  • 解锁BoTorch:PyTorch生态中的贝叶斯优化利器