×

Fatfs学习——显示长文件名

zxjy辉 zxjy辉 发表于2025-01-22 17:06:21 浏览720 评论0

抢沙发发表评论

杭州西湖,绝美山水4K壁纸,高清倒映风光,3840x2160大图下载 - 墨鱼部落格

显示长文件名


  1. 步骤

    1. 使能长文件名

      打开ffconf.h文件,将_USE_LEN设置为1

      image.png



    2. 使能完毕这个之后,还得修改 _CODE_PAGE
      image.png

    3. 添加cc936.c文件,如果不添加这个文件,将会报一个错误,该c文件fatfs源码有提供

      image.png

      原因在于使能长文件名之后

      image.png


      image.png

    4. // 测试代码
      // 需要注意的是由于之前的使能的长文件名宏定义是为 1,所以要开辟一个数组用于存储文件名,然后就是 lfname 才表示长文件名
      void DL_Task_ImageFileScan(void *param){
        FILINFO fno;                                        // 文件信息结构体
      	DwonLoader_FatfsInit();                             // 文件系统初始化
      	char lfn[50];
        fno.lfname = lfn;
      	fno.lfsize = sizeof(lfn);
      	while(1){                                           
      	  DIR dir;                                          // 文件夹
      	  FRESULT fr;                                       // 执行结果
      	  fr = f_opendir(&dir, "0:");                       // 打开文件目录    
      	  if (fr == FR_OK) {                                //如果打开成功循环读出文件名字到buff中
      	  for (;;) {                                        //循环读出文件名字,循环次数等于SD卡根目录下的文件数目
      	  		fr = f_readdir(&dir, &fno);                   //读取文件名
      	  		if (fr != FR_OK || fno.fname[0] == 0) break;  //读取错误或者读完所有文件结束就跳出循环
      	  		if (fno.fattrib & AM_ARC)                     //读取的是文件名字
      	  		{ 
      	  			// 保存文件名和文件的大小
      	  			FileInfoSave(&fileInfoGroup,fno.fname,fno.fsize);
                printf("%s  %d\r\n ",fno.lfname,fno.fsize);	
      	  			// 显示到gui界面
      	  			GUI_AddImageFileToList(fno.lfname);					
      	  		}	
      	  	}
      	   f_closedir(&dir);   //关闭文件目录
      	  }
      		vTaskSuspend(TaskHandel_ImageFileScan);  // 挂起自身 
      //		vTaskDelay(1000);
      //		printf("fff");
      		
      	}
      }


  2. 如果直接是unicode编码,不需要进行编码转化的话,也就是不需要_CODE_PAGE这个,可以设置 _LEN_UNICODE为1

    image.png

  3. 参考链接

    fatfs文件系统与lvgl字符编码的适配

    如何支持长文件名

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

#好好学习!

群贤毕至

访客