原创 文件名匹配测试程序

2011-10-16 01:38 1297 5 5 分类: MCU/ 嵌入式

/***********************************************************************
 - 功能描述:文件名匹配(支持带*?通配符的文件名的匹配)
 - 隶属模块: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);
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条