You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ExtractFileName设置TListItem标题在U盘读取时乱码求助

问题分析与解决办法

问题根源

你遇到的乱码问题核心是ExtractFileName函数在U盘环境下的编码适配问题:

  • 本地磁盘文件路径编码与系统默认编码一致,ExtractFileName能正常处理;
  • U盘多采用FAT32格式,文件名编码可能和系统默认ANSI编码不兼容,若工程误调用ANSI版本的ExtractFileNameA(而非Unicode版本ExtractFileNameW),会将Unicode文件名错误转码,最终导致乱码。

具体解决方法

方法1:强制调用Unicode版本的ExtractFileName

直接替换代码中的ExtractFileName为ExtractFileNameW,确保处理宽字符路径:

item->Caption = ExtractFileNameW(fileName.c_str());

方法2:手动实现文件名截取逻辑(彻底规避系统函数问题)

如果不想依赖系统函数,自行从路径中截取文件名更稳妥:

// 从后往前找路径分隔符(兼容\和/)
int pos = fileName.LastDelimiter("\\/");
// 截取分隔符之后的部分作为文件名
UnicodeString fileNameOnly = fileName.SubString(pos + 1, fileName.Length() - pos);
item->Caption = fileNameOnly;

验证建议

修改后在U盘环境测试,保留MessageBoxW代码对比截取前后的文件名,确认乱码是否消失。

内容的提问来源于stack exchange,提问作者OutOfTime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:18:20