CH376枚舉文件老有重復(fù)!

想根目錄枚舉 .BIN 文件。 第一次插入U(xiǎn)盤枚舉正確,重新插入U(xiǎn)盤后,枚舉就不正確了,可能出現(xiàn)同一個(gè)文件被枚舉了多次的現(xiàn)象,或者枚舉出一個(gè) \ 文件。 幾乎每次都是這樣。不知道為什么,請(qǐng)教了。

FileBinData.Num 為BIN文件個(gè)數(shù) FileNameBuffer[FileBinData.Num].BINNAME[a] 保存文件名 最后在液晶屏上顯示 代碼如下 : //索引根目錄 bool ListRoot(void) { UINT8 s; P_FAT_DIR_INFO pDir;

FileBinData.Num = 0; /* 讀取原文件 */ strcpy( buf, "\\" ); /* C51子目錄不存在則列出根目錄下的文件 */ DbgPrint( PSW_USB,"List file %s\n", buf ); CH376FileOpenPath( buf ); /* 枚舉多級(jí)目錄下的文件或者目錄,輸入緩沖區(qū)必須在RAM中 */

CH376FileClose( FALSE ); /* 對(duì)于根目錄一定要關(guān)閉 */ CH376WriteVar32( VAR_START_CLUSTER, 0 ); /* 當(dāng)前目錄的起始簇號(hào),相當(dāng)于打開(kāi)當(dāng)前目錄 */ CH376SetFileName( "*" ); /* 設(shè)置將要操作的文件的文件名,通配符支持所有文件和子目錄 */

xWriteCH376Cmd( CMD0H_FILE_OPEN ); /* 枚舉文件和目錄 */ s = Wait376Interrupt( ); if(s!=USB_INT_DISK_READ) { //報(bào)錯(cuò) mStopIfError(s); return FALSE; }

while ( s == USB_INT_DISK_READ ) { /* 枚舉到匹配的文件 */ CH376ReadBlock( buf ); 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[8] == 'B' && pDir -> DIR_Name[9] == 'I' && pDir -> DIR_Name[10] == 'N' ) { DbgPrint( PSW_USB,"This is .BIN file\n" ); uint8 a = 0; for ( s = 0; s < 11; s ++ ) { /* 復(fù)制文件名,長(zhǎng)度為11個(gè)字符 */ if ( pDir->DIR_Name[s] != 0x20 ) { /* 有效字符 */ if ( s == 8 ) { /* 處理擴(kuò)展名 */ FileNameBuffer[FileBinData.Num].BINNAME[a++] = '.'; /* 分隔符 */ FileNameBuffer[FileBinData.Num].BINNAME[a++] = pDir->DIR_Name[s]; } else { FileNameBuffer[FileBinData.Num].BINNAME[a++] = pDir->DIR_Name[s]; } } } FileBinData.Num++; } pDir -> DIR_Attr = 0; /* 強(qiáng)制文件名字符串結(jié)束以便打印輸出 */ DbgPrint( PSW_USB, "*** EnumName: %s\n", pDir -> DIR_Name ); } xWriteCH376Cmd( CMD0H_FILE_ENUM_GO ); /* 繼續(xù)枚舉文件和目錄 */ // xEndCH376Cmd( ); s = Wait376Interrupt( ); } return TRUE; }

每次都是液晶屏顯示重復(fù)的BIN文件,或者\(yùn)文件。第一次都沒(méi)錯(cuò)

你這個(gè)流程有點(diǎn)問(wèn)題,按照這個(gè)流程試試: strcpy( SrcName, "/CH376HFT.C" ); /* 源文件名,多級(jí)目錄下的文件名和路徑名必須復(fù)制到RAM中再處理,而根目錄或者當(dāng)前目錄下的文件名可以在RAM或者ROM中 */ // strcpy( TarName, "\\C51\\A\\B\\NEW.MP3" ); /* 目標(biāo)文件名 */ printf( "Open\n" ); s = CH376FileOpenPath( SrcName ); /* 打開(kāi)文件,該文件在C51子目錄下 */ if ( s == ERR_MISS_DIR || s == ERR_MISS_FILE ) { /* 沒(méi)有找到目錄或者沒(méi)有找到文件 */ /* 列出文件,完整枚舉可以參考EXAM13全盤枚舉 */ if ( s == ERR_MISS_DIR ) strcpy( buf, "\\*" ); /* C51子目錄不存在則列出根目錄下的文件 */ else strcpy( buf, "\\C51\\CH376*" ); /* CH376HFT.C文件不存在則列出\C51子目錄下的以CH376開(kāi)頭的文件 */ printf( "List file %s\n", buf ); 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; /* 特殊字符替換 */ pDir -> DIR_Attr = 0; /* 強(qiáng)制文件名字符串結(jié)束以便打印輸出 */ printf( "*** EnumName: %s\n", pDir -> DIR_Name ); /* 打印名稱,原始8+3格式,未整理成含小數(shù)點(diǎn)分隔符 */ } xWriteCH376Cmd( CMD0H_FILE_ENUM_GO ); /* 繼續(xù)枚舉文件和目錄 */ // xEndCH376Cmd( ); s = Wait376Interrupt( ); }


WanJ { M } 你好!謝謝你的回復(fù)。 用你的流程試了一下,可還是有問(wèn)題,還會(huì)有重復(fù)文件枚舉出來(lái),還可能枚舉出來(lái) \* 文件。一直不知道錯(cuò)在哪里,請(qǐng)幫忙在看看!謝謝!


你所說(shuō)的重復(fù)文件是什么意思???能把你的現(xiàn)象說(shuō)的仔細(xì)一點(diǎn)么?


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

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