CH376目錄名和文件名問題

一旦目錄名里出現(xiàn)“.”號,就會(huì)出錯(cuò)。 除了改名字,還有其他方法解決嗎?

(比如做了一個(gè)自動(dòng)按目錄播放的MP3,總不能要求用戶先把目錄名中的點(diǎn)號給去掉吧) (長文件名大概會(huì)沒問題,但目前CH376似乎對LFN支持不是很好)


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

1、出什么錯(cuò),代碼是多少? 2、“LFN”是什么意思,對長文件名的處理具體遇到什么問題了?


應(yīng)該不會(huì)出現(xiàn)出錯(cuò)的現(xiàn)象,按照常理來講,在短文件名里面是不允許出現(xiàn)"."這個(gè)字符的,肯定和你軟件處理上面有關(guān)系,對于你來講,打開文件和打開目錄是完全一樣的.


比如我遇到的情況:一個(gè)歌手的專輯名為 No.1 No.2 No.3 然后枚舉后就是得到 No No No 這樣就沒法進(jìn)入子目錄了。

源代碼如是:

/// CMD_RD_USB_DATA0 max data length is 255 //vector vcu8; //vcu8.reserve(256); static U8 vcu8[255];

if(CH376FileOpenPath((gi.cdir + '*').c_str()) == USB_INT_DISK_READ) { FILEMORE: /* read FAT_DIR_INFO , size is sizeof(FAT_DIR_INFO) */ CH376ReadBlock(&vcu8[0]); P_FAT_DIR_INFO pDir = (P_FAT_DIR_INFO)&vcu8[0];

/* 特殊字符替換 */ if(pDir->DIR_Name[0] == 0x05) pDir->DIR_Name[0] = 0xE5;

if (pDir->DIR_Attr & ATTR_DIR) { string sdir;

for(int s = 0; s < 8; s++) { if(pDir->DIR_Name[s] != 0x20) sdir += pDir->DIR_Name[s]; }

if ((sdir != "RECYCLED") && (sdir != ".") && (sdir != "..")) { sdir += '\\'; gi.vdn.push_back(sdir); } } else { string sfn, sext; int s;

for(s=0; s<8; s++) { if(pDir->DIR_Name[s] != 0x20) sfn += pDir->DIR_Name[s]; } for(; s<11; s++) { if(pDir->DIR_Name[s] != 0x20) sext += pDir->DIR_Name[s]; }

if (ExtNameCheck(sext)) { gi.vfn.push_back(sfn + '.' + sext); } }

xWriteCH376Cmd(CMD0H_FILE_ENUM_GO); xEndCH376Cmd();

if(USB_INT_DISK_READ == Wait376Interrupt()) goto FILEMORE; }[font=Lucida Console]文字[/font]


上貼已修改格式,請刪除本貼。

---- 格式不好,再貼一下: /// CMD_RD_USB_DATA0 max data length is 255 //vector vcu8; //vcu8.reserve(256); static U8 vcu8[255];

if(CH376FileOpenPath((gi.cdir + '*').c_str()) == USB_INT_DISK_READ) { FILEMORE: /* read FAT_DIR_INFO , size is sizeof(FAT_DIR_INFO) */ CH376ReadBlock(&vcu8[0]); P_FAT_DIR_INFO pDir = (P_FAT_DIR_INFO)&vcu8[0];

/* 特殊字符替換 */ if(pDir->DIR_Name[0] == 0x05) pDir->DIR_Name[0] = 0xE5;

if (pDir->DIR_Attr & ATTR_DIR) { string sdir;

for(int s = 0; s < 8; s++) { if(pDir->DIR_Name[s] != 0x20) sdir += pDir->DIR_Name[s]; }

if ((sdir != "RECYCLED") && (sdir != ".") && (sdir != "..")) { sdir += '\\'; gi.vdn.push_back(sdir); } } else { string sfn, sext; int s;

for(s=0; s<8; s++) { if(pDir->DIR_Name[s] != 0x20) sfn += pDir->DIR_Name[s]; } for(; s<11; s++) { if(pDir->DIR_Name[s] != 0x20) sext += pDir->DIR_Name[s]; }

if (ExtNameCheck(sext)) { gi.vfn.push_back(sfn + '.' + sext); } }

xWriteCH376Cmd(CMD0H_FILE_ENUM_GO); xEndCH376Cmd();

if(USB_INT_DISK_READ == Wait376Interrupt()) goto FILEMORE; }


嗯。 LFN就是長文件名


首先你確認(rèn)No.1這個(gè)文件夾應(yīng)該有一個(gè)短文件名,至于短文件名是什么你可以枚舉出來,還有在判斷是文件還是文件夾的時(shí)候,建議你先打開下文件,如果是文件夾返回0X41,如果是文件返回0X00,或者通過文件的屬性來判斷文件和文件夾,當(dāng)確定是文件夾之后在對文件夾進(jìn)行操作,當(dāng)是文件的時(shí)候?qū)ξ募M(jìn)行操作 程序上面if ((sdir != "RECYCLED") && (sdir != ".") && (sdir != ".."))判斷有點(diǎn)問題,對于.和..只判斷是前2個(gè)字節(jié)就好了,后面的不要判斷。


特地到WIN98下去測試了一下,我錯(cuò)了 原來8.3格式下 目錄名也有后綴! 比如No.1 目錄 后綴為"1"

呵呵,學(xué)DOS時(shí)沒學(xué)好啊

201022217402933.bmp


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

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