/***********************************************************************
- 功能描述:文件名匹配(支持带*?通配符的文件名的匹配)
- 隶属模块:znFAT文件系统模块
- 函数属性:内部
- 参数说明:pat:源文件名,可以含*或?通配符 如 *.txt 或 A?.mp3等等
name:目标文件名
- 返回说明:如果两个文件名匹配就返回1,否则为0
- 注:关于通配文件名匹配,有这样的例子,比如 A*.txt 与 ABC.txt是匹配的
同时与 ABCDE.txt也是匹配的。此功能在文件枚举中将会用到,用来匹配
文件名符合一定条件的文件
***********************************************************************/
#include<reg51.h>
#include<intrins.h>
#include<string.h>
unsigned char FilenameMatch(char *pat,char *name)
{
unsigned char match,ndone;
char *cpp,*cpn;
cpp=pat;
cpn=name;
match=1;
ndone=1;
while(ndone)
{
switch (*cpp)
{
case '*':
cpp++;
cpn=strchr(cpn,*cpp); //返回首次出现*cpp的位置的指针
if(cpn==NULL)
{
cpn=name;
while(*cpn) cpn++;
}
break;
case '?':
cpp++;
cpn++;
break;
case 0:
if(*cpn!=0)
match=0;
ndone=0;
break;
default:
if((*cpp)==(*cpn))
{
cpp++;
cpn++;
}
else
{
match=0;
ndone=0;
}
break;
}
}
return(match);
}
void main()
{
unsigned char flag=0;
char Temp_dir_name[13]="A*C.txt";
char Temp_file_name[30]="ABC.txt";
flag=FilenameMatch(Temp_dir_name,Temp_file_name);
while(1);
}
/***********************************************************************
- 功能描述:znFAT的文件目录项的文件名字段(8个字节),转为普通的文件名
如:ABC MP3 将转为 ABC.MP3
- 隶属模块:znFAT文件系统模块
- 函数属性:内部
- 参数说明:dName:指向文件目录项的文件名字段的指针
pName:指向转换完成后的文件名
- 返回说明:无
- 注:此函数配合上面的FilenameMatch函数,就可以实现对文件名通配匹配
***********************************************************************/
#include<reg51.h>
//#include<intrins.h>
#include<string.h>
void znFAT_toFileName(char *dName,char *pName) // znFAT_toFileName(pFile->deName,temp_file_name)
{
unsigned char i=0;
for(i=0;i<8;i++) pName=dName;
pName[8]='.';
for(i=9;i<12;i++) pName=dName[i-1]; //deName数组只有8个元素,为何有deName[8]出来??
i--; //原因是dName是一个指针,可以随意指向下一个地址,即扩展名地址
while(pName==0x20) pName[i--]=0; //将空格符全部置为0
pName[i+1]=0;i=7;
while(pName[i--]==0x20);i+=2;
strcpy(pName+i,pName+8); //将.MP3移动到ABC的后面形成ABC.MP3
}
void main()
{
unsigned char flag=0;
char Temp_dir_name[13]="ABC MP3";
char Temp_file_name[30];
znFAT_toFileName(Temp_dir_name,Temp_file_name);
while(1);
}
文章评论(0条评论)
登录后参与讨论