迅雷 Thunder.cfg 是标准 Windows INI 格式文本文件,仅部分值经 Base64 或十六进制编码;可用 GetPrivateProfileStringW(Windows)或 inih 库(跨平台)解析,注意编码、Base64 变种及运行时延迟写回问题。

迅雷 .cfg 文件本质是 INI 格式,不是自定义二进制协议
很多人以为迅雷的 Thunder.cfg 是加密或私有格式,实际它就是标准 Windows INI 文件(纯文本、[Section] + key=value),只是部分值用了 Base64 编码或十六进制转义。用记事本打开就能看到结构,比如:
[General] Version=9.1.49.570 UserID=MTIzNDU2Nzg5MA== DownloadDir=C:\Users\User\Downloads。解析前先确认文件编码:迅雷新版多用 UTF-8(无 BOM),旧版可能为 GBK,
fopen 或 std::ifstream 打开时需指定编码(Windows 下推荐用 _wfopen + std::wifstream 配合 std::codecvt_utf8<wchar_t></wchar_t>)。
用 GetPrivateProfileStringW 读取最简单,但仅限 Windows 平台
Windows API 提供了原生支持,无需第三方库,且自动处理节名大小写、空格、注释(; 开头行):
- 必须用宽字符版本
GetPrivateProfileStringW,否则中文路径/值会乱码 - 缓冲区长度要足够大(建议至少
MAX_PATH * 2),返回值为实际写入长度,0表示键不存在或为空 - 若值是 Base64(如
UserID),需额外调用CryptStringToBinaryW解码 - 不支持嵌套节或数组语法,迅雷也未使用这类扩展
WCHAR buffer[MAX_PATH * 2] = {0};
GetPrivateProfileStringW(L"General", L"DownloadDir", L"", buffer, _countof(buffer), L"Thunder.cfg");
// buffer 现在包含解码后的路径字符串跨平台解析推荐 inih 库,轻量且无依赖
inih(https://github.com/benhoyt/inih)只有两个源文件,C++ 封装层 INIReader 可直接用:
- 默认按 UTF-8 解析,若文件是 GBK,需先用
iconv或Windows-1252兼容方式转码再传入 - 对迅雷中常见的十六进制转义(如
DownloadDir=C:\Users\User\Downloads)无需特殊处理,inih原生支持反斜杠转义 - 注意:迅雷某些版本会在值末尾加
