ch376讀文件問(wèn)題求助

/******************************************************************************* * 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è),其他的都讀不出,求大俠幫助。

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


所有的文件都枚舉到了,但是打開(kāi)文件時(shí),只能打開(kāi)第一個(gè),其他的打開(kāi)失敗,

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

CH376FileClose( FALSE ); //不做寫操作可以無(wú)需關(guān)閉 } } }

}

是不是我這個(gè)讀的函數(shù)有地方錯(cuò)了???尤其是在設(shè)置文件夾時(shí)????


可能是調(diào)用了CH376FileClose( FALSE ); 所以導(dǎo)致下次打開(kāi)的時(shí)候,就找不到\\澳丹斯這個(gè)路徑了。 你不調(diào)用CH376FileClose( FALSE ); 實(shí)驗(yàn)一下看是否成功


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频