/******************************************************************************* * Function Name : Usb_Read * Description: : 枚舉U盤中澳丹斯文件夾下的所有txt文件 * Input : 無(wú) * Output : None * Return : None *******************************************************************************/ void Usb_enumerate_txt(void) { u8 s,i; u16 RealCount; P_FAT_DIR_INFO pDir; PUINT8 pNameBuf; UINT32 CurrentDirStartClust; /* 保存當(dāng)前目錄的起始簇號(hào),用于加快文件枚舉和打開(kāi)速度 */ PPN = PN; //Ppatientvalex=patientval;
/* 列出文件,完整枚舉可以參考EXAM13全盤枚舉 */ strcpy( buf, "\\澳丹斯2\\*" ); /* 枚舉澳丹斯文件夾下的所有文件 */ s = CH376FileOpenPath( buf ); /* 枚舉多級(jí)目錄下的文件或者目錄,輸入緩沖區(qū)必須在RAM中 */ while ( s == USB_INT_DISK_READ ) /* 枚舉到匹配的文件 */ { CH376ReadBlock( buf ); /* 讀取枚舉到的文件的FAT_DIR_INFO結(jié)構(gòu),返回長(zhǎng)度總是sizeof( FAT_DIR_INFO ) */ pDir = (P_FAT_DIR_INFO)buf; /* 當(dāng)前文件目錄信息 */ if ( pDir -> DIR_Name[0] != '.' ) /* 不是本級(jí)或者上級(jí)目錄名則繼續(xù),否則必須丟棄不處理 */ { if ( pDir -> DIR_Name[0] == 0x05 ) pDir -> DIR_Name[0] = 0xE5; /* 特殊字符替換 */ } if ( pDir -> DIR_Name[0] != '.' ) /* 不是本級(jí)或者上級(jí)目錄名則繼續(xù),否則必須丟棄不處理 */ { if ( pDir -> DIR_Name[0] == 0x05 ) pDir -> DIR_Name[0] = 0xE5; /* 特殊字符替換 */ if ( FileCount < MAX_FILE_COUNT ) /* 文件名結(jié)構(gòu)緩沖區(qū)足夠 */ { pNameBuf = FileNameBuffer[ FileCount ].Name; /* 文件名結(jié)構(gòu)中的文件名緩沖區(qū) */ for ( s = 0; s < 11; s ++ ) /* 復(fù)制文件名,長(zhǎng)度為11個(gè)字符 */ { if ( pDir -> DIR_Name[ s ] != 0x20 ) /* 有效字符 */ { if ( s == 8 ) /* 處理擴(kuò)展名 */ { *pNameBuf = '.'; /* 分隔符 */ pNameBuf ++; } *pNameBuf = pDir -> DIR_Name[ s ]; /* 復(fù)制文件名的一個(gè)字符 */ pNameBuf ++; } } *pNameBuf = 0; /* 當(dāng)前文件名完整路徑的結(jié)束符 */ FileNameBuffer[ FileCount ].DirStartClust = CurrentDirStartClust; /* 記錄當(dāng)前目錄的起始簇號(hào),用于加快文件打開(kāi)速度 */ FileNameBuffer[ FileCount ].Attr = pDir -> DIR_Attr; /* 記錄文件屬性 */ FileCount ++; /* 子目錄計(jì)數(shù) */ } else { /* 文件名結(jié)構(gòu)緩沖區(qū)太小,結(jié)構(gòu)數(shù)量不足 */ LCM_Write_String(0,1,"病患數(shù)量已滿"); s = Wait376Interrupt( ); CH376EndDirInfo( ); /* 獲取完FAT_DIR_INFO結(jié)構(gòu) */ break; /* 強(qiáng)行終止枚舉 */ } } xWriteCH376Cmd( CMD0H_FILE_ENUM_GO ); /* 繼續(xù)枚舉文件和目錄 */ s = Wait376Interrupt( ); if (s == ERR_MISS_FILE) break; //枚舉完成后跳出 } s = CH376FileClose( TRUE ); /* 關(guān)閉文件,對(duì)于字節(jié)讀寫建議自動(dòng)更新文件長(zhǎng)度 */
} void Usb_Read_txt(void) { u8 i,j,s; u16 RealCount; u8 patient_num; patient_num= Flag_PatientNum ;
//U盤中的文件及目錄全部枚舉完畢,下面開(kāi)始根據(jù)結(jié)構(gòu)記錄依次打開(kāi)文件 CH376SetFileName( "\\澳丹斯2" ); for ( i = 0; i < patient_num; i ++ ) { if ( ( FileNameBuffer[ i ].Attr & ATTR_DIRECTORY ) == 0 ) //是文件則打開(kāi),目錄則跳過(guò) { s = CH376FileOpen( FileNameBuffer[ i ].Name ); //打開(kāi)文件 if ( s == USB_INT_SUCCESS ) //成功打開(kāi)了文件 { for( j=0 ; j<30 ; j++ ) buf[j]=0; s = CH376ByteRead( buf, sizeof(buf), &RealCount ); //以字節(jié)為單位從當(dāng)前位置讀取數(shù)據(jù)塊 for( j=0 ; j<25 ; j++ ) patientvalex[i].p[j] = buf[j];
CH376FileClose( FALSE ); //不做寫操作可以無(wú)需關(guān)閉 } } }
}
我先是枚舉澳丹斯文件夾下的所有文件名,然后再把所有文件中的內(nèi)容獨(dú)處。我是在澳丹斯文件夾下建了四個(gè)txt文檔。只能讀出第一個(gè),其他的都讀不出,求大俠幫助。