[求助]我要枚舉U盤里面所有的MP3再依次讀出,我該怎么辦啊,歷程13里面是枚舉所有文件,怎么改才行?

RT[求助]我要枚舉U盤里面所有的MP3再依次讀出,我該怎么辦啊,歷程13里面是枚舉所有文件,怎么改才行?

用的是CH376的例程13


如果只是想要枚舉MP3文件,只能通過自己軟件過濾


上述問題已用下面代碼解決。謝謝study的幫助! 現(xiàn)在我有個問題就是: 我現(xiàn)在已經(jīng)打開MP3文件了,我應(yīng)該以字節(jié)還是以扇區(qū)來讀MP3文件,而我對扇區(qū)不是很了解,我是不是不用去計算哪個扇區(qū),然后直接用讀扇區(qū)的函數(shù)去讀打開的MP3文件就行了?

------------------------------------------------------------------------------------------------------------ if ( ( FileNameBuffer[ OldFileCount ].Attr & ATTR_DIRECTORY ) == 0 ) { /* 是文件則打開,目錄則跳過 */ nameLen = strlen( (char const *)(FileNameBuffer[ OldFileCount ].Name) ); if(nameLen < 4) continue; pExt = ((char *)(FileNameBuffer[ OldFileCount ].Name)) + nameLen - 4; if(strcmp(pExt, (char *)".MP3") == 0 ){ printf( "Open file: %s\n", FileNameBuffer[ OldFileCount ].Name ); CH376WriteVar32( VAR_START_CLUSTER, FileNameBuffer[ OldFileCount ].DirStartClust ); /* 將當(dāng)前文件所在上級目錄的起始簇號設(shè)置為當(dāng)前簇號,相當(dāng)于打開上級目錄 */ s = CH376FileOpen( FileNameBuffer[ OldFileCount ].Name ); /* 打開文件 */ if ( s == USB_INT_SUCCESS ) { /* 成功打開了文件 */ s = CH376ByteRead( buf, CH376GetFileSize( ), &RealReadCount ); /* 以字節(jié)為單位從當(dāng)前位置讀取數(shù)據(jù)塊 */ //s = CH376ByteRead( buf, sizeof(buf), &RealReadCount ); /* 以字節(jié)為單位從當(dāng)前位置讀取數(shù)據(jù)塊 */ if ( RealReadCount != CH376GetFileSize( ) ) printf( "File size = %d\n", RealReadCount ); /* 文件長度不足sizeof(buf) */ CH376FileClose( FALSE ); /* 不做寫操作可以無需關(guān)閉 */ } } }


打開文件后,默認(rèn)情況下就是從最前面開始讀取。循環(huán)讀的話就是從最前面開始依次向文件尾部讀取

當(dāng)然也可以從文件的任意地址去讀,比如跳過第一個扇區(qū)從第二個扇區(qū)讀。


感謝紅桃兄的回復(fù),于是我按照下面的代碼讀取整個MP3的數(shù)據(jù)。但是問題出現(xiàn)了,我調(diào)試時候發(fā)現(xiàn)該代碼在if (NewSize>U32DataCount)判斷時候老是出錯,明明NewSize的值還是大于U32DataCount的值的,但是卻跳出了循環(huán) ,也就是說該循環(huán)只執(zhí)行了一次。我不知道我錯在哪里,難道是我判斷出錯了嗎? ----------------------------------------------------------------------------------------------------------- if ( s == USB_INT_SUCCESS ) { /* 成功打開了文件 */ NewSize = CH376GetFileSize( ); if (NewSize>U32DataCount){ s = CH376ByteRead( buf, 32, &RealReadCount ); /* 以字節(jié)為單位從當(dāng)前位置讀取數(shù)據(jù)塊 */ U32DataCount+=RealReadCount; } printf( "MP3 size is %d\n", NewSize ); if ( U32DataCount != NewSize ) printf( "File size = %d\n", U32DataCount ); /* 文件長度不足sizeof(buf) */ CH376FileClose( FALSE ); /* 不做寫操作可以無需關(guān)閉 */ U32DataCount=0;


我換成while(NewSize>U32DataCount);后發(fā)現(xiàn)一直在循環(huán),跳不出來,到底怎么回事???


1.if (NewSize>U32DataCount) 這條語句只執(zhí)行一次 是正確的; 2.跟蹤一下程序看看U32DataCount值有沒有發(fā)生變化


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

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