请问各位大侠,用CH376读写U盘的时候,如何列举U盘目录(根目录或任一打开的文件夹)里面的文件名和拓展名,并用串口将文件名和拓展名发送出去?思想是什么,如果有源代码就更好了,急用,谢谢! 用的是串口和CH376通信,51单片机
打开要枚举的文件夹,枚举当前文件夹下的文件或者目录,枚举的方法可以参考EXAM1主程序开头部分的例程,也可以参考376编程手册(CH376EVT中)
谢谢您的回答,我还要麻烦您,枚举目录下的文件名(所有的都要枚举)之后,怎么样把枚举到的文件名通过串口(单片机的另一个串口)发出或者是将枚举到的文件名写入文档呢?
把枚举到得文件名通过另一个串口发出到哪边?写入到哪里的文档
不好意思我没讲清楚,我需要单片机有两个串口,一个串口和CH376相连,另一个串口和其他设备连接。单片机控制CH376去列举U盘的指定文件夹内的文件名,然后单片机把列举到文件夹内的每个文件名通过另一个串口发送到PC或者其他设备。如果写入文档的话,在U盘新建立一个文档,并把列举到的文件名写入。当然发送的是最好的,不知道这样描述您懂得我的意思没有
建文档可以,参考EXAM7.另一个串口把文件名发送出去,你就操作另外一个串口发送就是了
谢谢指导,EXAM1和EXAM7我都看过了,我不清楚如何将文件名取出来,比如取到的文件名在什么变量里面,应该如何操作取文件名和发送呢?
strcpy( buf, "\\C51\\CH376*" ); /* CH376HFT.C文件不存在则列出\C51子目录下的以CH376开头的文件 */ printf( "List file %s\n", buf ); s = CH376FileOpenPath( buf ); /* 枚举多级目录下的文件或者目录,输入缓冲区必须在RAM中 */ while ( s == USB_INT_DISK_READ ) { /* 枚举到匹配的文件 */ CH376ReadBlock( buf ); /* 读取枚举到的文件的FAT_DIR_INFO结构,返回长度总是sizeof( FAT_DIR_INFO ) */ 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 ); /* 打印名称,原始8+3格式,未整理成含小数点分隔符 */ } xWriteCH376Cmd( CMD0H_FILE_ENUM_GO ); /* 继续枚举文件和目录 ,放在buf里面的
谢谢指教,根据您说的我修改了一下,程序如下
s = CH376FileCreate( "演示记录.TXT" ); /*为了将所列举的文件名存在一个文件中, 在根目录或者当前目录下新建文件*/ mStopIfError( s ); s = CH376FileClose( TRUE ); //关闭文件,自动更新文件长度 mStopIfError( s );
/******* 此处省略历程中关于初始化的语句********/
strcpy( buf, "/*\0" ); // 列举目录下的所有文件
s = CH376FileOpen( buf ); //开始打开所有文件 while ( s == USB_INT_DISK_READ ) // 枚举到匹配的文件 { CH376ReadBlock( buf ); // 读取枚举到的文件的FAT_DIR_INFO结构
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 = CH376FileOpen( "演示记录.TXT" ); s = CH376ByteWrite( buf, strlen(buf), NULL ); //以字节为单位向当前位置写入数据块 mStopIfError( s ); s = CH376FileClose( TRUE ); //关闭文件,自动更新文件长度 mStopIfError( s ); } xWriteCH376Cmd( CMD0H_FILE_ENUM_GO ); //继续枚举文件和目录 ,放在buf里面的
这个程序我只是实验在根目录下完成操作,在子目录的情况我没有试过。我试主函数加大while(1)的情况和不加while(1)得情况,以上语句均不能达到要求,生成的文档里面有很少的几个字,但不是我想要的文件名。如果加大循环我还注意了将新建文件的语句拿出循环防止重复新建文件。而且加大循环while(1)程序就会一直循环,不知道用什么标志让其完成一边列举后退出循环。 请问大侠我应该怎么修改,达到将所在目录下的文件名写入当前目录下新建的一个文档中?谢谢!
没看懂你到底要做什么....CH376FileOpen( "演示记录.TXT" ); 这种写法是错误的,如果是根目录下应该这样写CH376FileOpen( "/演示记录.TXT" ); 还有你整个枚举的流程也是错误的,枚举时不能打开其它文件,你先参考EXAM1把枚举的流程弄清楚