ch376读文件问题求助

/******************************************************************************* * 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文档。只能读出第一个,其他的都读不出,求大侠帮助。

是否可以枚举到所有的文件?


所有的文件都枚举到了,但是打开文件时,只能打开第一个,其他的打开失败,

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.p[j] = buf[j];

CH376FileClose( FALSE ); //不做写操作可以无需关闭 } } }

}

是不是我这个读的函数有地方错了???尤其是在设置文件夹时????


可能是调用了CH376FileClose( FALSE ); 所以导致下次打开的时候,就找不到\\澳丹斯这个路径了。 你不调用CH376FileClose( FALSE ); 实验一下看是否成功


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