资讯详情

基于蓝讯SDK学习长文件名文件创建

📅 2026/10/29 19:35:13 | 华诺云谱 👁 阅读
基于蓝讯SDK学习长文件名文件创建
fat短文件名文件创建FAT目录分为长文件名目录LFN以及短文件名目录SFN长文件目录是在短文件名目录上的一个扩展具体采用长文件名还是短文件名由读取FAT文件系统的操作系统决定蓝讯SDK是采用短文件名.短文件名要遵循8.3格式,即8 字节的主文件名 3字节的扩展名目录条目结构如下字段名偏移大小说明实例DIR_Name011短文件名MIC001.WAVDIR_Name_char08短文件名字符部分MIC001空格空格(0x4D 0x49 0x43 0x30 0x30 0x31 0x20 0x20)DIR_Name_suffix83短文件名字符部分WAV(0x57 0x41 0x56)创建短文件名的函数是FRESULTfs_open(constchar*path,u8 mode);//按路径打开或创建文件短文件名创建文件将文件名写入到磁盘的核心函数是dir_register(DIR *dp,const char *lfn);具体流程为通过函数dir_alloc(dp,1)在目录中分配一项目录项空间,dp-dir[0]到dp-dir[7]放入短文件名,dp-dir[8]到dp-dir[10]放入文件名后缀.设置短文件名的实例如下,先声明默认的短文件名字符数组,存储默认文件名.将文件名数组作为fs_open的参数创建文件过程中调用的核心函数如下constcharfile_name_mic[]MIC00001.WAV;//文件名字符长度最大为8,后缀名为3charfname_buf[100];//存储文件路径memset(fname_buf,0,sizeof(fname_buf));fname_buf[0]/;strcpy((char*)fname_buf[pos],file_name_mic);resfs_open((constchar*)fname_buf,FA_WRITE|FA_CREATE_NEW);respf_open(fname_buf,0,fat_file,mode);resfollow_path(dj,fat_file,0,fname_buf)//走到目标路径,存储文件名.rescreate_name(dj,(fname_buf[1]));//把短文件名字符部分与短文件名后缀部分存入dp-fn中resdir_register(dj,0);//将文件名写入磁盘.resdir_alloc(dp,1);//为目录中分配一项目录项空间resdir_next(dp,1);dj-dirfs-win(i%16)*32;//dp-dir用的数组空间是与磁盘交互读写的fs-win数组memcpy(dp-dir0,dp-fn,11);//把dp-fn中的短文件名放入dp-dir中,dp-dir是最终放短文件名的数组.fat长文件名文件创建创建一个有长文件名的文件,一定要有短文名,二者的文件名字符部分不需要有关联,文件系统判断文件是否存在,是通过短文件名,新创建的长文件名可以与已经存在的文件的长文件名重复,但新创建的文件的短文件名与已经存在的文件的短文件名不能重复.长目录条目结构如下创建长文件名的函数是FRESULTfs_open_lfn(constchar*path,constchar*lfn,u8 mode);//按路径打开或创建文件长文件名创建文件一个目录项空间为32字节,能存储13个字符,SDK中的程序设置最多有ENTRY_NUM8个目录项空间,一共能存储104个字符.包括文件名字符部分,后缀名与点.一个目录项存够13个字符后,下一个目录项继续存之后的字符的13个字符,直到存完所有字符.设置长文件的方法如下.先声明默认的短文件名字符数组,存储默认文件名.声明存储长文件名的数组,存储长文件名.如果不包含中文的话,长文件名格式为:文件名的长度x,0,字符1,0,字符2,0,…字符x,0.lfn_buf[0]存储文件长度,lfn_buf[1]0,lfn_buf[2]开始存储长文件名,一个字符占两个字节.将短文件名数组与长文件名数组作为fs_open_lfn的参数磁盘存储长文件名需要多个目录项空间在创建文件的过程中,通过函数dir_alloc(dp,entries);在目录中分配连续的目录项空间constcharfile_name_mic[]MIC00001.WAV;//文件名字符长度最大为8,后缀名为3charfname_buf[100];//存储文件路径memset(fname_buf,0,sizeof(fname_buf));fname_buf[0]/;charlfn_buf[100];//存储长文件create_timestamp_filename(lfn_buf);//生成长文件名strcpy((char*)fname_buf[pos],file_name_mic);//生成短文件名resfs_open_lfn((constchar*)fname_buf,(constchar*)lfn_buf,FA_WRITE|FA_CREATE_NEW);respf_open(fname_buf,lfn_buf,fat_file,mode);resfollow_path(dj,fat_file,lfn_buf,fname_buf)rescreate_name(dj,(fname_buf[1]));//把短文件名字符部分与短文件名后缀部分存入dp-fn中resdir_register(dj,lfn_buf);//将长文件名与短文件名写入磁盘.resdir_alloc(dp,entries);//在目录中分配连续的目录项空间memcpy(dirbuf,lfn[2],len);//复制长文件名内容ST_WORD(dirbuflen,0);//末尾设置0,标志文件结束memcpy(dp-dir[0x01],dirbuf[0pos],10);//将长文件名复制到dp-dir中.创建长文件的实例条目结构如下长文件名为001_ABCD_20260123_040513_32F.WAV长文件名数组的值为:32 0 0x30 0 0x30 0 0x31 0 0x5f 0 0x41 0 0x42 0 0x43 0 0x44 0 0x5f 0 0x32 0 0x30 0 0x32 0 0x36 0 0x30 0 0x31 0 0x32 0 0x33 0 0x5f 0 0x30 0 0x34 0 0x30 0 0x35 0 0x31 0 0x33 0 0x5f 0 0x33 0 0x32 0 0x46 0 0x2e 0 0x57 0 0x41 0 0x56 0 0 0位置字段名偏移大小说明实例中的值第一块DIR_Name01序号(1-20),用来表示此条目属于长文件名序列条目中的第几条.且长文件名序列首条条目的值应0x40以进行标识SDK中程序设置的序号最大为ENTRY_NUM80x41第一块DIR_Name1110长文件名,第1~第5字符(此处需要用Unicode编码,一个字符占两个字节)001_A(0x30 0 0x30 0 0x31 0 0x5f 0 0x41 0)第一块DIR_Attr111长文件名属性,此值永远为ATTR_LONG_NAME 0x0F0x0f第一块DIR_type121类型,必须为00第一块DIR_chksum131和校验,根据短文件名计算和校验chknum第一块DIR_Name21412长文件名,第6~第11字符(此处需要用Unicode编码,一个字符占两个字节)BCD_20(0x42 0 0x43 0 0x44 0 0x5f 0 0x32 0 0x30 0)第一块DIR_fstcluslo262必须为00第一块DIR_Name3284长文件名,第12~第13字符(此处需要用Unicode编码,一个字符占两个字节)26(0x32 0 0x36 0)第二块DIR_Name01序号,长文件名序列条目中的第几条0x2第二块DIR_Name1110长文件名,第1~第5字符(此处需要用Unicode编码,一个字符占两个字节)0123_(0x30 0 0x31 0 0x32 0 0x33 0 0x5f 0)第二块DIR_Attr111长文件名属性,此值永远为ATTR_LONG_NAME 0x0F0x0f第二块DIR_type121类型,必须为00第二块DIR_chksum131和校验,根据短文件名计算和校验chknum第二块DIR_Name21412长文件名,第6~第11字符(此处需要用Unicode编码,一个字符占两个字节)040513(0x30 0 0x34 0 0x30 0 0x35 0 0x31 0 0x33 0)第二块DIR_fstcluslo262必须为00第二块DIR_Name3284长文件名,第12~第13字符(此处需要用Unicode编码,一个字符占两个字节)_3(0x5f 0 0x33 0)第三块DIR_Name01序号,长文件名序列条目中的第几条0x3第三块DIR_Name1110长文件名,第1~第5字符(此处需要用Unicode编码,一个字符占两个字节)2F.WA(0x32 0 0x46 0 0x2e 0 0x57 0 0x41 0)第三块DIR_Attr111长文件名属性,此值永远为ATTR_LONG_NAME 0x0F0x0f第三块DIR_type121类型,必须为00第三块DIR_chksum131和校验,根据短文件名计算和校验chknum第三块DIR_Name21412长文件名,第6~第11字符(此处需要用Unicode编码,一个字符占两个字节)V文件结束标志(0x56 0 0 0)第三块DIR_fstcluslo262必须为00第三块DIR_Name3284长文件名,第12~第13字符(此处需要用Unicode编码,一个字符占两个字节)无内容(0xff 0xff 0xff 0xff)exfat文件名详见解析exFAT 文件系统原理详解
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑