fatfs f_readdir 在使用长文件名时的问题

当使用fatfs的f_readdir函数时,如果涉及长文件名(LFN),必须在调用前初始化FILINFO结构体的lfsize字段。在分析过程中发现,当lfsize为0时,无法正确获取LFN,而fatfs源码中并未找到lfsize的初始化位置,导致问题出现。
摘要由CSDN通过智能技术生成

fatfs f_readdir 在使用长文件名时的问题

结论先行

FRESULT f_readdir (DIR* dp, FILINFO* fno)

在使用了长文件名后,在操作f_readdir前,需要初始化fno.lfsize

	
	FILINFO info;
	TCHAR name[64];
	int res;
	DIR file_dir;
	
	info.lfname = name;
	info.lfsize = 64;  //init lfsize

	f_opendir(&file_dir, PICTURE_FILE_DIR);
	f_readdir(&file_dir, &info);

分析过程

在使能了长文件名后,通过f_readdir遍历目录下的文件,发现获取到的lfname为空,代码如下

++log++

[DBG]-[NORMAL]\USER\main.c\list_for_each_pic\read dir, res=0, fname=PIC201~1.BMP, lfname=
[DBG]-[NORMAL]\USER\main.c\list_for_each_pic\read dir, res=0, fname=PIC201~2.BMP, lfname=
[DBG]-[NORMAL]\USER\main.c\list_for_each_pic\read dir, res=0, fname=PIC201~3.BMP, lfname=

++code++

static void list_for_each_pic(char *debug)
{
   
	FILINFO info;
	TCHAR name[64];
	int res;
	DIR file_dir;
	
	info.lfname = name;

	DBG_TO_SERIAL(DBG_NORMAL, "%s", debug);

	res = f_opendir(&file_dir, PICTURE_FILE_DIR);
	if (res
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值