请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1329|回复: 2
收起左侧

[FileX] filex对中文名称文件的完整名字获取

[复制链接]

14

主题

50

回帖

97

积分

初级会员

积分
97
发表于 2022-9-17 09:53:56 | 显示全部楼层 |阅读模式
问题描述:
            在读取U盘中的中文名称的文件时,获取到的文件名字不全,原本名称为007@缝纫测试图.JED但是读取到的文件名称是007@缝~1.JED
官方手册阅读: image.png
                              
由截图内容可知,filex在使用标准8.3格式对文件命名时,条目名称只有8个字符,而从问题描述中的“原本名称为007@缝纫测试图.JED但是读取到的文件名称是007@缝~1.JED。”也能对应上—“007@缝~1”正好是8个字符。
8.3命名格式:
8.3格式通常指较旧的Windows操作系统或DOS的文件命名格式
“8”是指文件名或目录名的主体部分小于等于8个字节;
“3”是指文件名的扩展名部分小于等于3个字节;
8.3文件名的有效字符不包括空格等特殊字符
若不符合以上限制则会以"~"作延长名称如"ProgramFiles"会变成"Progra~1"
若同一文件夹有相似的名称,末端的数值则会自动递增
8.3短文件名格式规范是DOS+FAT12/FAT16时代遗留下的老规矩
自从Windows95开始(其实据说从Windowsfor Groups 3.11开始),
Windows就已经能支持长文件名,但是为了向前兼容,特别是文件系统兼容性,
FAT文件系统均强制执行“为长文件名提供8.3兼容格式的短文件名”的特性。
因此你会看到,在FAT16/32文件系统上:
目录"programfiles"同时还拥有一个8.3规范的"PROGRA~1"短名称;
而文件"元素周期表.exe"也同时拥有一个"元素周~1.exe"的短名称。
[这有一点像类UNIX系统下的hardlink,一个对象拥有两个引用方式。]
         
结合filex官方手册、8.3命名格式的说明以及问题的现象,可以确定问题是因为8.3命名所造成的!
如何获取长文件名:
         根据上述可知,我们获取到的中文名称是8.3格式的短文件名,而我们实际要使用的是完整的长文件名,那么如何获取到长文件名呢?
仿真:
         根据经验,这种问题一般在仿真时查看关键变量或者内存数据变化,能够找到线索。
         在触发filex+usbx查找U盘中指定目录存在的文件时,逐步仿真,发现对于有中文名字的文件和纯英文名字的文件,在名字信息上有所差异:
image.png
         可以看到包含中文的文件名要比纯英文的文件名信息多了2行,除了包含1行短文件名之外,还有2行信息。
资料查找与对比:
         这多出来的2行数据,结合“007@缝纫测试图”的unicode码和filex unicode格式分析来看,两者是对应的:
image.png
image.png
image.png
         
获取长文件名API
         filex官方手册pdf中全局搜索“unicode”,找到可能适合的API函数:
image.png
API实际测试:
         在获取到文件名称后,使用fx_unicode_name_get获取长文件名,仿真查看在获取到的具体内容(以007@缝纫侧视图.JED为测试目标):
image.png
其中file_name中存放短文件名,unicode_name中存放长文件名:
image.png
image.png
可以看到此API可以正确读出文件的长文件名!!!
总结:
         遇到此类问题要先阅读官方手册,找到线索后可以辅助仿真进一步排查。

评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105914
QQ
发表于 2022-9-22 11:11:18 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

14

主题

50

回帖

97

积分

初级会员

积分
97
 楼主| 发表于 2022-9-23 15:26:56 | 显示全部楼层
实际测试发现此方法对于exFAT格式的U盘并不适用,于是又进行了探索,具体见此贴:
filex对中文名称文件的完整名字获取-exFAT格式
https://www.armbbs.cn/forum.php? ... 5&fromuid=31310
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-3-28 19:10 , Processed in 0.164258 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表