/******************************************************************************* * Function Name : Usb_Read * Description: : 枚举U盘中澳丹斯文件夹下的所有txt文件 * Input : 无 * Output : None * Return : None *******************************************************************************/ void Usb_enumerate_txt(void) { u8 s,i; u16 RealCount; P_FAT_DIR_INFO pDir; PUINT8 pNameBuf; UINT32 CurrentDirStartClust; /* 保存当前目录的起始簇号,用于加快文件枚举和打开速度 */ PPN = PN; //Ppatientvalex=patientval;
/* 列出文件,完整枚举可以参考EXAM13全盘枚举 */ strcpy( buf, "\\澳丹斯2\\*" ); /* 枚举澳丹斯文件夹下的所有文件 */ 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; /* 特殊字符替换 */ } if ( pDir -> DIR_Name[0] != '.' ) /* 不是本级或者上级目录名则继续,否则必须丢弃不处理 */ { if ( pDir -> DIR_Name[0] == 0x05 ) pDir -> DIR_Name[0] = 0xE5; /* 特殊字符替换 */ if ( FileCount < MAX_FILE_COUNT ) /* 文件名结构缓冲区足够 */ { pNameBuf = FileNameBuffer[ FileCount ].Name; /* 文件名结构中的文件名缓冲区 */ for ( s = 0; s < 11; s ++ ) /* 复制文件名,长度为11个字符 */ { if ( pDir -> DIR_Name[ s ] != 0x20 ) /* 有效字符 */ { if ( s == 8 ) /* 处理扩展名 */ { *pNameBuf = '.'; /* 分隔符 */ pNameBuf ++; } *pNameBuf = pDir -> DIR_Name[ s ]; /* 复制文件名的一个字符 */ pNameBuf ++; } } *pNameBuf = 0; /* 当前文件名完整路径的结束符 */ FileNameBuffer[ FileCount ].DirStartClust = CurrentDirStartClust; /* 记录当前目录的起始簇号,用于加快文件打开速度 */ FileNameBuffer[ FileCount ].Attr = pDir -> DIR_Attr; /* 记录文件属性 */ FileCount ++; /* 子目录计数 */ } else { /* 文件名结构缓冲区太小,结构数量不足 */ LCM_Write_String(0,1,"病患数量已满"); s = Wait376Interrupt( ); CH376EndDirInfo( ); /* 获取完FAT_DIR_INFO结构 */ break; /* 强行终止枚举 */ } } xWriteCH376Cmd( CMD0H_FILE_ENUM_GO ); /* 继续枚举文件和目录 */ s = Wait376Interrupt( ); if (s == ERR_MISS_FILE) break; //枚举完成后跳出 } s = CH376FileClose( TRUE ); /* 关闭文件,对于字节读写建议自动更新文件长度 */
} void Usb_Read_txt(void) { u8 i,j,s; u16 RealCount; u8 patient_num; patient_num= Flag_PatientNum ;
//U盘中的文件及目录全部枚举完毕,下面开始根据结构记录依次打开文件 CH376SetFileName( "\\澳丹斯2" ); for ( i = 0; i < patient_num; i ++ ) { if ( ( FileNameBuffer[ i ].Attr & ATTR_DIRECTORY ) == 0 ) //是文件则打开,目录则跳过 { s = CH376FileOpen( FileNameBuffer[ i ].Name ); //打开文件 if ( s == USB_INT_SUCCESS ) //成功打开了文件 { for( j=0 ; j<30 ; j++ ) buf[j]=0; s = CH376ByteRead( buf, sizeof(buf), &RealCount ); //以字节为单位从当前位置读取数据块 for( j=0 ; j<25 ; j++ ) patientvalex[i].p[j] = buf[j];
CH376FileClose( FALSE ); //不做写操作可以无需关闭 } } }
}
我先是枚举澳丹斯文件夹下的所有文件名,然后再把所有文件中的内容独处。我是在澳丹斯文件夹下建了四个txt文档。只能读出第一个,其他的都读不出,求大侠帮助。