文件枚举求助

ch375文件枚举,搜索出u盘根目录下的“.EP”后缀名的文件,帮忙看下这段程序可不可行,谢谢!

pCodeStr = "/*"; /* 列出目录下的ep文件*/ for ( c = 0; c < 254; c ++ ) { /* 最多搜索前254个文件 */ i = mCopyCodeStringToXRAM( mCmdParam.Open.mPathName, pCodeStr ); /* 搜索文件名,*为通配符,适用于所有文件或者子目录 */

i = CH375FileOpen( ); /* 打开文件,如果文件名中含有通配符*,则为搜索文件而不打开 */ if ( i == ERR_MISS_FILE ) break; /* 再也搜索不到匹配的文件,已经没有匹配的文件名 */ if ( i == ERR_FOUND_NAME ) { /* 搜索到与通配符相匹配的文件名,文件名及其完整路径在命令缓冲区中 */ j=0; while(mCmdParam.Open.mPathName[j]!='.'){ if(mCmdParam.Open.mPathName[j]==0){j=0x0a;;break;} /*遇到文件结束跳出*/ j++; } if(j!=0x0a){ j++; if(mCmdParam.Open.mPathName=='E'){ //判断是否EP文件 j++; if(mCmdParam.Open.mPathName=='P'){ printf( " match file %03d#: %s\n", (unsigned int)c, mCmdParam.Open.mPathName ); /* 显示序号和搜索到的匹配文件名或者子目录名 */ } } } continue; /* 继续搜索下一个匹配的文件名,下次搜索时序号会加1 */ } else { /* 出错 */ mStopIfError( i ); break; } }

参考例程改的 去掉了例程里这一句: mCmdParam.Open.mPathName[ i ] = c; /* 根据字符串长度将结束符替换为搜索的序号,从0到254 */

这样可以吗?能不能达到枚举EP文件的目的 每次枚举是不是都会更新mCmdParam.Open.mPathName为枚举文件的文件名?


1、枚举序号不可以去掉,否则不能枚举出全部文件 2、枚举到文件之后,mCmdParam.Open.mPathName中为枚举到的文件名 3、判断后缀名的方式有多种,验证一下只要能实现目标即可,建议从最后一个字符向前判断


加入序号之后怎么判断结束符呢


前面定义mCmdParam.Open.mPathName[ i ] = c; /* 根据字符串长度将结束符替换为搜索的序号,从0到254 */ 枚举之后,mCmdParam.Open.mPathName更新为文件名,序号还在吗?


这样更改可不可以: pCodeStr = "/*"; /* 列出目录下的ep文件*/ for ( c = 0; c < 254; c ++ ) { /* 最多搜索前254个文件 */ i = mCopyCodeStringToXRAM( mCmdParam.Open.mPathName, pCodeStr ); /* 搜索文件名,*为通配符,适用于所有文件或者子目录 */ mCmdParam.Open.mPathName[ i ] = c; /* 根据字符串长度将结束符替换为搜索的序号,从0到254 */ i = CH375FileOpen( ); /* 打开文件,如果文件名中含有通配符*,则为搜索文件而不打开 */ if ( i == ERR_MISS_FILE ) break; /* 再也搜索不到匹配的文件,已经没有匹配的文件名 */ if ( i == ERR_FOUND_NAME ) { /* 搜索到与通配符相匹配的文件名,文件名及其完整路径在命令缓冲区中 */

j=0; while(mCmdParam.Open.mPathName[ j]!=0){ j++;/*获取文件名字符串长度*/ }

if(mCmdParam.Open.mPathName[j-1]=='P'){ //判断是否EP文件 if(mCmdParam.Open.mPathName[j-2]=='E'){ printf( " match file %03d#: %s\n", (unsigned int)c, mCmdParam.Open.mPathName ); /* 显示序号和搜索到的匹配文件名或者子目录名 */ } } continue; /* 继续搜索下一个匹配的文件名,下次搜索时序号会加1 */ } else { /* 出错 */ mStopIfError( i ); break; } }


枚举文件前,需要用户指定序号,枚举到文件后,序号就被文件名覆盖了,需要用户再次指定


那就是枚举之后我直接判断结束符是否为0获取文件名字符串长度就可以了吧 像上面我改过的程序那样


是的,建议这样判断文件的后缀名: i = sizeof( mCmdParam.Open.mPathName ); if( mCmdParam.Open.mPathName[ i - 1 ] == 'P' && mCmdParam.Open.mPathName[ i - 2 ] == 'E' && mCmdParam.Open.mPathName[ i - 3 ] == '.' ) { ...}


好的 这样精简许多


只有登录才能回复,可以选择微信账号登录