您好,貴公司提供的讀u盤長文件名文件的例子exam11中: /*讀取指定短文件名的長文件名,返回長文件名在長文件名空間*/ UINT8 mLookUpLName(){ UINT8 BlockSer1; /*定義兩個扇區(qū)塊內(nèi)記數(shù)*/ unsigned char xdata ParData[MAX_PATH_LEN]; /**/ UINT16 tempSec; /*扇區(qū)偏移*/ UINT8 a,i,j,x,k,sum; F_LONG_NAME xdata *pLDirName; P_FAT_DIR_INFO pDirName; bit FBuf; unsigned char xdata *pBuf; unsigned int xdata *pBuf1; for(k=0;k!=MAX_PATH_LEN;k++)ParData[k]=mCmdParam.Other.mBuffer[k]; /**/ i=mChkName(&j); if ( i == ERR_SUCCESS ) { /* 成功獲取上級目錄的起始簇號 */ BlockSer1=0; FBuf=0; /*初始化*/ tempSec=0; while(1){ /*下面是讀取并分析目錄項*/ pDirName=FBuf?FILE_DATA_BUF_ADDR1:FILE_DATA_BUF_ADDR; /*短文件名指針指向緩沖區(qū)*/ mCmdParam.ReadX.mSectorCount=1; /*讀取一扇區(qū)數(shù)據(jù)*/ mCmdParam.ReadX.mDataBuffer=FBuf?FILE_DATA_BUF_ADDR1:FILE_DATA_BUF_ADDR; /*當前處理的文件緩沖區(qū),這里使用雙向緩沖區(qū),去處理文件名*/ FBuf=!FBuf; /*緩沖區(qū)標志翻轉(zhuǎn)*/ i=CH375FileReadX( ); if(i!=ERR_SUCCESS)goto XFF; if(mCmdParam.ReadX.mSectorCount==0){k=16;break;} /*表示沒有數(shù)據(jù)讀出*/ tempSec+=1; /*扇區(qū)記數(shù)加一*/ for(k=0;k!=16;k++){ pBuf=&ParData[j+1]; if(pDirName->DIR_Name[i]==0){k=15;a=1;continue;} /*第一個字節(jié)為0,表示以后沒有有效的目錄項了*/ if(pDirName->DIR_Name[i]==0xe5){pDirName++;continue;} /*第一個字節(jié)為0XE5表示此項被刪除*/ if(pDirName->DIR_Attr==ATTR_VOLUME_ID){pDirName++;continue;} /*為卷標,不分析*/ if(pDirName->DIR_Attr==ATTR_LONG_NAME){pDirName++;continue;} /*為長文件名,不分析*/ for(i=0;i!=8;i++){ /*分析文件名是否相同*/ if(pDirName->DIR_Name[i]==0x20)continue; /*為20不分析*/ if(pDirName->DIR_Name[i]!=*pBuf)break; else pBuf++; } if(i!=8){pDirName++;continue;} /*沒有找到匹配的短文件名*/ if(*pBuf=='.')pBuf++; for(;i!=11;i++){ if(pDirName->DIR_Name[i]==0x20)continue; if(pDirName->DIR_Name[i]!=*pBuf)break; else pBuf++; } if(i==11){break;} /*表示找到文件名*/ pDirName++; } if(i==11)break; /*找到*/ if(a==1){k=16;break;} } if(k!=16){ pBuf1=LongFileName; x=0; sum=ChkSum(pDirName); /*計算和*/ pLDirName=FBuf?FILE_DATA_BUF_ADDR:FILE_DATA_BUF_ADDR1; /*長文件名指針指向緩沖區(qū)*/ pLDirName+=k-1; if(k==0){pLDirName=FBuf?FILE_DATA_BUF_ADDR1:FILE_DATA_BUF_ADDR; /*如果短文件名是叢第一組開始的,長文件名就要往起移動*/ pLDirName+=15; k=15; } while(1){ if(pLDirName->LDIR_Attr==0x0f&pLDirName->LDIR_Chksum==sum&pLDirName->LDIR_Ord!=0xe5){ for(j=0;j!=5;j++){ *pBuf1=pLDirName->LDIR_Name1[j]; pBuf1++; } for(;j!=11;j++){ *pBuf1=pLDirName->LDIR_Name2[j-5]; pBuf1++; } for(;j!=13;j++){ *pBuf1=pLDirName->LDIR_Name3[j-11]; pBuf1++; } /*這里將長文件名復制出去,最大16*13個長文件名*/ x++; } else break; /*沒有長文件名則條出*/ if(x==15)break; /*最大限制長文件名為16*13字節(jié)*/ if(k==0){ /*首先移動文件指針*/ pLDirName=FBuf?FILE_DATA_BUF_ADDR1:FILE_DATA_BUF_ADDR; pLDirName+=15; } else {pLDirName-=1; k-=1;} } } } *pBuf1=0; pBuf1++; i=CH375FileClose( ); return 0; XFF: return i; }
其中if(pDirName->DIR_Name[i]==0){k=15;a=1;continue;} /*第一個字節(jié)為0,表示以后沒有有效的目錄項了*/ 這句還有后面幾句中的i是在哪賦的值?我總覺得是不是應(yīng)該是0呢