[求助]长短文件名简单根目录枚举问题

遇到了一个问题,按照EXAM1里面做短文件名的根目录枚举,程序通过,但是加入了EXAM11里面的显示长文件名的代码之后,只能枚举出来1个文件。(U盘里有3个文件,都是英文名。)请问下各位能帮我看下这代码吗?为什么变为长文件名输出以后,Wait376Interrupt()返回了ERR_MISS_FILE ,即0x42?

短文件名根目录枚举主要代码如下:(几乎全是EXAM1里的代码了)

strcpy((char *)buf,"\\*"); printf("List file %s\n",buf); s=CH376FileOpenPath(buf); while(s==USB_INT_DISK_READ) { CH376ReadBlock(buf); pDir=(P_FAT_DIR_INFO)buf; if(pDir->DIR_Name[0]!='.') { if(pDir->DIR_Name[0]==0x05) pDir->DIR_Name[0]=0xE5; pDir->DIR_Attr=0; printf("*** EnumName: %s\n",pDir->DIR_Name); } xWriteCH376Cmd(CMD0H_FILE_ENUM_GO); xEndCH376Cmd(); s=Wait376Interrupt(); printf("s=%02x",s); }

长文件名根目录枚举主要代码如下:(加入了部分EXAM11里的代码)

strcpy((char *)buf,"\\*"); printf("List file %s\n",buf); s=CH376FileOpenPath(buf); while(s==USB_INT_DISK_READ) { CH376ReadBlock(buf); pDir=(P_FAT_DIR_INFO)buf; if(pDir->DIR_Name[0]!='.') { if(pDir->DIR_Name[0]==0x05) pDir->DIR_Name[0]=0xE5; pDir->DIR_Attr=0; s=CH376GetLongName(pDir->DIR_Name,LongNameBuf); for(j=0;j { printf("%c",LongNameBuf[j]); if(*(PUINT16)(&LongNameBuf[j])==0) break; } delay_ms(20); printf("s=%02x \n",s); } xWriteCH376Cmd(CMD0H_FILE_ENUM_GO); xEndCH376Cmd(); s=Wait376Interrupt(); printf("s=%02x",s); }

请问为什么第二段程序中中断直接就返回了ERR_MISS_FILE呢?

按照你的送入的短文件名不正确,例如一个文件名为“11111111111111111.txt”文件,你枚举出来的短文件名为“111111~1TXT”,而获取的长文件名需要输入绝对路径。还有如果是一个短文件名,例如“12.TXT”,按照你获取的文件名应该是“12 TXT”中间有6个空格。


谢谢,貌似就是路径的问题,这个地方我的确忽略了。


但是有个地方我想再问一下,xWriteCH376Cmd(CMD0H_FILE_ENUM_GO);这个命令表示到哪里去继续枚举?那个语句可以决定他的枚举范围?还是默认就是全盘枚举吗?


枚举当前目录下符合要求的文件或者目录。


谢谢!


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