fatfs文件系统支持中文长文件名

179 篇文章 175 订阅

一、引出

        Fatfs文件系统中存在短文件名和长文件名的概念。当文件名的字符长度短于13个字符时,称为短文件名。当长于13个字符则称为长文件名。

        如果不配置Fatfs文件系统的长文件名功能,当遇到短于13个字符文件名的文件时可以正常显示,ke是当遇到文件名比13字符长时,Fatfs就会自动做截断处理,效果如下:

当配置了长文件名功能,当然就可以全部显示了:

二、说明

        接触到fatfs文件系统的长文件名,一般是在使用 f_readdir() 这个函数时,这个函数的功能就是获取上一步使用 f_opendir() 打开的文件夹中的内容,包含文件名和文件夹,并将文件信息保存到定义的结构体中,包含文件信息的结构体内容如下:

typedef struct {
	DWORD	fsize;			/* File size */
	WORD	fdate;			/* Last modified date */
	WORD	ftime;			/* Last modified time */
	BYTE	fattrib;		/* Attribute */
	TCHAR	fname[13];		/* Short file name (8.3 format) */
#if _USE_LFN
	TCHAR*	lfname;			/* Pointer to the LFN buffer */
	UINT 	lfsize;			/* Size of LFN buffer in TCHAR */
#endif
} FILINFO;

        从这个结构体我们就可以知道,短文件名是保存到fname[13]中的,它本身就是一个数组,可以存放13个字符,因此当不打开支持长文件名的功能或者所有文件的名字长度短于13个字符,我们都不需要去操心,因为文件系统会把名字自动保存到fname[13]中。而长文件名是保存在lfname所指向地址的,它是一个指针,并没有实际的内存空间,因此当我们使用它之前,需要先开辟一个空间,然后让lfname指向它才行,不然会发生内存错误。

        如果要支持中文长文件名,还需要添加一个GBK和Unicode编码的互转文件,因为短文件名本来就是GBK编码的,所以不用转。可是长文件名使用的UTF-16编码,这是Unicode的一种编码方式,所以要先转换为GBK才可以使用。(详细连接)Fatfs提供了这个转换文件,名字为cc936.c。

三、配置方法

第一步:

打开ffconf.h文件,把_USE_LFN修改为1。

解释:

0是不打开长文件名功能。

1是使用一个静态内存区来保存长文件名

2是动态分配单片机的STACK中的内存来保存长文件名。

3是动态分配单片机的HEAP的内存来保存长文件名。

第二步:(不需要支持中文,可以跳过)

修改宏定义_CODE_PAGE为936,并添加cc936.c文件。

第三步:

为长文件名开辟内存空间,直接定义一个全局变量即可。

#if _USE_LFN
    char lfn[50];           
#else

于是配置就完成了。

 

四、使用

    if(f_opendir(&dir,DirName) == FR_OK)              //打开路径目录
    {
#if _USE_LFN
        fno.lfname=lfn;
        fno.lfsize = sizeof(lfn);
#endif		
        while(f_readdir(&dir, &fno) == FR_OK)         //读目录中的文件,并保存到fno中
        {
            printf("sfn:%s,lfn:%s\n",fno.fname,fno.lfname);
			
            if(id>300)break;                          //文件数超过300,就退出
            if(!fno.fname[0]&&!fno.lfname[0]) break;  //没有文件了
        }
    }

 

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
FATFS是一个用于嵌入式系统的FAT文件系统模块,用于对存储设备上的文件进行管理。在FAT文件系统中,默认使用的是"8.3"命名规则,即文件名最多为8个字符,扩展名最多为3个字符。然而,FATFS也提供了对文件名支持。 要使用文件名,首先需要在FATFS的配置文件中进行相应的设置。具体的配置方式可以参考FATFS的官方文档或开发者手册。 配置好后,在使用FATFS的API进行文件操作时,可以使用支持文件名的函数来创建、读取和写入文件。这些函数会自动处理文件名和短文件名之间的映射关系,使得开发者可以方便地操作文件名。 例如,使用FATFS提供的f_open函数来打开一个文件时,可以传入一个以NULL结尾的字符串参数,该参数即为要打开的文件名。如果文件名文件名,则FATFS会自动将其转换为相应的短文件名。类似地,对于其他文件操作函数,也可以按照相应的方式进行操作。 需要注意的是,文件名FAT文件系统中存储的方式与短文件名有所不同,通常需要占用更多的存储空间。因此,在使用FATFS的时候,需要根据实际情况综合考虑,选择适合的文件名命名方式。 总的来说,使用FATFS支持文件名的方法是在配置文件中进行相应的设置,然后使用提供的API函数进行文件操作即可。通过这种方式,可以在嵌入式系统中方便地使用文件名来管理文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【ql君】qlexcel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值