【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。
在代码中加上这部分以后,问题得到解决。

你可能感兴趣的:(STM32)