FatFs 使用中文长文件名

原创 2017年02月24日 13:41:06

一、说明

这里写图片描述
使用长文件名,一般会是在使用 f_readdir() 这个函数时碰到,这个函数的功能就是获取上一步使用 f_opendir() 打开的文件夹中的内容,并将文件信息保存到定义的结构体。

结构体内容如下,
这里写图片描述
里面包含有文件大小,上一次修改日期,文件属性,文件名等。可见,普通文件名是存在一个 fname[13] 的数组里的,这就使得长文件名无法正常显示。而长文件名是一个指针,这个指针指向的数组是需要自己定义的。

二、方法

在使用长文件名时,需要更改 ffconf.h 中的宏定义如下,
这里写图片描述

如果需要支持中文则还需要做如下更改,
这里写图片描述

如下内容非常关键:

方式1

使用长文件名时,需要自己添加存储长文件名的 buffer, 所以需要在用户程序中定义如下内容;
这里写图片描述
将文件信息中长文件名指针指向定义的 buffer
这里写图片描述

方式2

也可以直接使用这种方式:
这里写图片描述

效果如下:
这里写图片描述

三、演示代码

附一份示例代码:

void scan_files(void)
{
#if _USE_LFN
  Fileinfo.lfname = lfn;
  Fileinfo.lfsize = sizeof(lfn);
#endif 
    uint8_t ret;
    uint8_t sum = 0;

    if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0) 
  {
    if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) != FR_OK)
    {
      SD_Error_Handler();
    }
    else
    {
            if((ret = f_opendir(&Dir,(const TCHAR *)MUSIC_DIR_PATH)) != FR_OK)
            {
                printf("ret : %d ",ret);
                SD_Error_Handler();
            }
            else
            {
                printf("open music dir\n");
                for(;;)
                {
                    ret = f_readdir(&Dir,&Fileinfo);
                    if(ret != FR_OK || Fileinfo.fname[0] == 0)
                    {
                        break;//Break on error or end of dir
                    }
                    else
                    {   
                        if(Fileinfo.lfname[0] == 0)
                        {
                            printf("lfname : error\n");
                        }
                        else
                        printf("%s\n",Fileinfo.lfname);
                    }
                    if(Fileinfo.fattrib & AM_ARC)//is a file?
                    {
                            strcpy((char *)filename[sum],(char *)Fileinfo.lfname);
                            sum++;
                    }
                }
            }
        }
    }
    printf("sum : %d \n",sum);
    show_filename(sum);
    //show_file();
    FATFS_UnLinkDriver(SDPath);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问个人主页 http://cyang.tech https://blog.csdn.net/u011303443/article/details/56838849

FatFs路径名称规则、字符集和卷管理

本文基于V0.12b版本1.路径名称格式         FatFs模块路径名格式与DOS/Windos文件名规格类似,如下所示:                                   ...
  • zhzht19861011
  • zhzht19861011
  • 2016年11月24日 08:25
  • 3334

FATFS怎么支持长文件名和汉字

FATFS官网:http://elm-chan.org/fsw/ff/00index_e.html 1.从FATFS官网上下载FATFS程序 2.把FATFS中文件上中的后缀名为.c的文件改成.c...
  • dongpanshan
  • dongpanshan
  • 2012年10月09日 16:00
  • 5723

FATFS文件系统的中文长文件名配置的几个注意事项

今天终于把FATFS文件系统的中文长文件名弄个端倪出来了。可以在串口输出根目录甚至是二级目录下的文件,虽然还是有些小问题需要进一步调试。 第一步,当然是下载,这个很容易,下载到最新的FF0.9a就行...
  • yongyooh
  • yongyooh
  • 2013年08月07日 21:46
  • 3629

fatfs的长文件名/短文件名

http://blog.csdn.net/wwwdotfa/article/details/8267132
  • ysmz4
  • ysmz4
  • 2014年09月18日 14:09
  • 1643

unicode转GBK,GNK转unicode,解决FATFS中文码表占用ROM问题

之前一直使用的512KB ROM的STM32,但是最近使用的只有128KB,想用FATFS显示支持长文件名,发现添加CC936.C后ROM肯定不够的,就决定将这个双向码表存储到外部存储器中,flash...
  • cp1300
  • cp1300
  • 2012年06月04日 12:55
  • 8352

FatFs中文介绍和移植方法

本文很不错,故转载如下,但不是最新版的FatFS。 FatFS的官方网站  提供了详细的资料 ——————————————一下为转载—————————————————————- 下面是我做的一...
  • andylauren
  • andylauren
  • 2016年08月26日 11:13
  • 3098

Unicode与GBK互转

>             Tags: encoding,c 1. gb2312 规定: 一个小于127的字符的意义与原来相同, 但两个大于127的字符连在一起时, 就表示 一个汉字,...
  • tge7618291
  • tge7618291
  • 2012年05月28日 11:02
  • 44872

FATFS支持英文长文件名

这段时间在做SD卡的驱动以及在此基础上增加FAT32文件系统. SD卡目前使用SDHC 16G的TF卡,读写擦功能都支持. 那么FAT32文件系统,我们可以在网上找到开源的FAT文件系统这个文件系...
  • lan120576664
  • lan120576664
  • 2015年09月10日 16:09
  • 3213

FatFS f_open()函数详解

最新版 FatFS f_open详解 时间 2014-03-21 16:21:21  程序员玩耍的小窝 原文  http://www.forwhat.cn/post-202.html 主题 技术...
  • tiankongtiankong01
  • tiankongtiankong01
  • 2016年04月20日 15:09
  • 2130

FATFS支持长文件名-英文

  • 2013年10月28日 15:29
  • 263KB
  • 下载
收藏助手
不良信息举报
您举报文章:FatFs 使用中文长文件名
举报原因:
原因补充:

(最多只允许输入30个字)