【FATFS】Fatfs读目录支持长文件名

背景:
在使用Fatfs文件系统的时候,发现文件名一旦超出8.3这格式的时候,就会出现乱码的现象。

分析:
经过查找后发现,8.3格式就是短文件名的命名格式,8是指文件名或目录名的主体部分小于等于8个字符,3是指文件名或目录名的扩展部分小于等于3个字符中间以 . 作为分割,即类似88888888.333类似的文件格式。因此这个bug显然是由于系统长文件名和短文件名造成的。

但是,我们查找了FATFS中的长文件名的配置方法,即配置ffconf.h文件中

#define	_USE_LFN 	2
#define	_MAX_LFN	255

而且我们也在使用到了长文件名的函数里面初始化了fileinfo.lfname和 fileinfo.lfsize,但是还是不起作用。

#if _USE_LFN
    static char lfn[_MAX_LFN];
    fileinfo.lfname = lfn;
    fileinfo.lfsize = sizeof(lfn);
#endif

解决:
经过查找FATFS的API手册发现,官方使用长文件名去读文件目录的时候,会先做如下操作:

#if _USE_LFN 
	fn = *fno.lfname ? fno.lfname : fno.fname; 
#else 
	fn = fno.fname; 
#endif 

也就是会判断读出来的fno.lfname是否为真,如果为真就使用fno.lfname,如果不为真就使用fno.fname。
在代码中加上这部分以后,问题得到解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值