如何利用CompactGUI的Compactor组件实现Windows文件透明压缩:完整指南
如何利用CompactGUI的Compactor组件实现Windows文件透明压缩:完整指南
【免费下载链接】CompactGUITransparently compress active games and programs using Windows 10/11 APIs项目地址: https://gitcode.com/gh_mirrors/co/CompactGUI
CompactGUI是一款利用Windows 10/11 API实现游戏和程序透明压缩的工具,其核心组件Compactor.cs通过高效的文件压缩算法,帮助用户节省磁盘空间同时不影响程序运行性能。本文将深入解析Compactor组件的工作原理和使用方法,带你掌握Windows文件压缩的终极技巧。
Compactor组件的核心功能与工作流程
Compactor类位于CompactGUI.Core/Compactor.cs,实现了ICompressor接口,主要负责文件压缩的核心逻辑。其工作流程主要包括三个阶段:文件筛选、并行压缩和进度监控。
文件筛选机制
Compactor通过BuildWorkingFilesList方法筛选需要压缩的文件:
var filesList = analysedFiles? .Where(fl => fl.CompressionMode != wofCompressionAlgorithm && fl.UncompressedSize > clusterSize && ((fl.FileInfo != null && !excludedFileExtensions.Contains(fl.FileInfo.Extension)) || excludedFileExtensions.Contains(fl.FileName)) ) .Select(fl => new FileDetails(fl.FileName, fl.UncompressedSize)) .ToList();这段代码实现了智能文件筛选,排除已压缩文件、小文件和指定扩展名的文件,确保压缩效率和系统稳定性。
并行压缩处理
Compactor使用并行处理提高压缩效率:
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxParallelism, CancellationToken = cancellationTokenSource.Token }; await Parallel.ForEachAsync(workingFiles, parallelOptions, (file, ctx) => { ctx.ThrowIfCancellationRequested(); return new ValueTask(PauseAndProcessFile(file, totalFilesSize, cancellationTokenSource.Token, progressMonitor)); }).ConfigureAwait(false);默认情况下,并行度设置为CPU核心数,可通过maxParallelism参数调整,平衡性能与系统资源占用。
Windows压缩API的高效应用
Compactor的核心在于对Windows WOF (Windows Overlay Filesystem) API的封装与应用。通过WOFCompressFile方法调用系统原生压缩功能:
private unsafe int? WOFCompressFile(string filePath) { try { using (SafeFileHandle fs = File.OpenHandle(filePath)) { return PInvoke.WofSetFileDataLocation(fs, (uint)WOFHelper.WOF_PROVIDER_FILE, compressionInfoPtr.ToPointer(), compressionInfoSize); } } catch (Exception ex) { CompactorLog.FileCompressionFailed(_logger, filePath, ex.Message); return null; } }这段代码通过PInvoke.WofSetFileDataLocation调用Windows原生API,实现文件的透明压缩。支持三种压缩算法:
- LZNT1:快速压缩算法,适合大多数场景
- XPress:平衡压缩率和速度
- XPress Huffman:更高压缩率,适合大文件
实用功能解析
压缩进度监控
Compactor通过CompressionProgress结构体实现实时进度监控:
public struct CompressionProgress { public int ProgressPercent { get; } public string FileName { get; } public CompressionProgress(int progressPercent, string fileName) { ProgressPercent = progressPercent; FileName = fileName; } }在压缩过程中,通过progressMonitor.Report方法实时更新进度,方便UI展示。
暂停/恢复与取消功能
Compactor提供完整的任务控制功能:
- 暂停:通过
Pause方法暂停压缩进程 - 恢复:通过
Resume方法继续压缩 - 取消:通过
Cancel方法终止压缩操作
这些功能通过信号量和取消令牌实现,确保操作的安全性和资源正确释放。
实际应用场景与最佳实践
游戏文件压缩
Compactor特别适合游戏文件压缩,通过排除特定文件类型(如.exe、.dll)确保游戏正常运行,同时压缩纹理、音频等大型资源文件。配置示例:
var excludedExtensions = new string[] { ".exe", ".dll", ".sys" }; var compactor = new Compactor(gameFolderPath, WOFCompressionAlgorithm.XPress, excludedExtensions, analyser);程序文件优化
对于办公软件、开发工具等程序,可选择性压缩帮助文档、示例项目等非运行必需文件,节省磁盘空间同时保持程序响应速度。
总结
Compactor.cs作为CompactGUI的核心组件,通过封装Windows WOF API,实现了高效、透明的文件压缩解决方案。其并行处理机制、智能文件筛选和完善的任务控制,使其成为Windows平台下文件压缩的理想选择。无论是游戏玩家还是系统管理员,都能通过Compactor组件轻松实现磁盘空间优化,提升系统存储效率。
要开始使用CompactGUI,可通过以下命令克隆仓库:
git clone https://gitcode.com/gh_mirrors/co/CompactGUI探索更多压缩功能和高级配置,释放你的磁盘空间潜力!
【免费下载链接】CompactGUITransparently compress active games and programs using Windows 10/11 APIs项目地址: https://gitcode.com/gh_mirrors/co/CompactGUI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
