關(guān)于讀長文件名文件問題

您好, 我通過CH376GetLongName函數(shù)來讀取文件的長文件名。 正好U盤里面有一個文件名很長的文件,文件名為:“[]進(jìn)站必看.播放器.更新11。13 - 隨便扯扯 - 544255355 QQ日志 - qq五月天qqmay.com__TITLE__META http-equi.mp3”。結(jié)果軟件走不出CH376GetLongName函數(shù)。 結(jié)果通過仿真器發(fā)現(xiàn),程序一直停在函數(shù)UINT8 CH376LocateInUpDir( PUINT8 PathName )中的while循環(huán)中。 全局緩沖區(qū)的定義為:u8 GlobalBuf[512]; 請問這個是什么樣的問題呢? 是無法避免的,還是通過什么設(shè)置能夠通過?

謝謝。

按照獲取長文件名函數(shù)里面應(yīng)該還有一個長文件名緩沖區(qū)。這個緩沖區(qū)就是u8 GlobalBuf[512];嗎?按照FAT文件系統(tǒng)來說,最長的長文件名字符個數(shù)是不會超過512的,可能需要你去看下你的程序停在哪個步驟出現(xiàn)問題。


不會的,這個函數(shù)應(yīng)該會有返回值,你的長文件名的短文件名是什么?你前面的376初始化和376DISKMOUNT過了沒有


UploadImages/201210169361869.rar


376初始化和376DISKMOUNT是能夠通過的。 軟件會在CH376LocateInUpDir函數(shù)中的以下一個循環(huán)中,退不出來。 while ( 1 ) { /* 不斷移動文件指針,直到與當(dāng)前文件目錄信息所在的扇區(qū)LBA地址匹配 */ s = CH376SecLocate( *(PUINT32)(&GlobalBuf[0]) ); /* 以扇區(qū)為單位在上級目錄中移動文件指針 */ if ( s != USB_INT_SUCCESS ) return( s ); CH376ReadBlock( &GlobalBuf[8] ); /* 從內(nèi)存緩沖區(qū)讀取CH376_CMD_DATA.SectorLocate.mSectorLba數(shù)據(jù)塊,返回長度總是sizeof(CH376_CMD_DATA.SectorLocate) */ if ( *(PUINT32)(&GlobalBuf[8]) == *(PUINT32)(&GlobalBuf[4]) ) return( USB_INT_SUCCESS ); /* 已到當(dāng)前文件目錄信息扇區(qū) */ xWriteCH376Cmd( CMD50_WRITE_VAR32 ); xWriteCH376Data( VAR_FAT_DIR_LBA ); /* 得到前一個扇區(qū),設(shè)置為新的文件目錄信息扇區(qū)LBA地址 */ for ( s = 8; s != 12; s ++ ) xWriteCH376Data( GlobalBuf[ s ] ); xEndCH376Cmd( ); ++ *(PUINT32)(&GlobalBuf[0]); }


上面是我們提供的測試可以通過的例子程序。你拿這個例子程序測試。


我也是遇到這種情況,在CH376LocateInUpDir函數(shù)中while循環(huán)不出來,有個疑問: for ( s = 4; s != 8; s ++ ) { GlobalBuf[ s ] = xReadCH376Data( ); /* 臨時保存于全局緩沖區(qū)中,節(jié)約RAM */ } 這個給GlobalBuf[4]~GlobalBuf[7]賦值了,但接下來有條語句: *(PUINT32)(&GlobalBuf[0]) = 0; /* 目錄扇區(qū)偏移扇區(qū)數(shù),保存在全局緩沖區(qū)中,節(jié)約RAM */ 結(jié)果又把GlobalBuf[0]~GlobalBuf[7]全變?yōu)?x00了,這是為什么呢?


這可能跟你的單片機(jī)有關(guān),我們前面是給GlobalBuf[4]~GlobalBuf[7]賦值,后面是給GlobalBuf[0]~GlobalBuf[3]賦0x00,PUINT32是32位四字節(jié)長度不會把GlobalBuf[4]~GlobalBuf[7]賦0x00.


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

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