文件枚舉問題

在看EXAM13文件枚舉的程序中遇到不明白的地方,求指導(dǎo)! for ( FileCount = 1; OldFileCount < FileCount; OldFileCount ++ ) { if ( FileNameBuffer[ OldFileCount ].Attr & ATTR_DIRECTORY ) { strcpy( mCmdParam.Open.mPathName, FileNameBuffer[ OldFileCount ].Name ); CH375vStartCluster = FileNameBuffer[ OldFileCount ].DirStartClust; /* 當(dāng)前目錄的上級(jí)目錄的起始簇號(hào),便于用相對(duì)路徑打開,比完整路徑名速度快 */ i = CH375FileOpen( ); if ( i == ERR_SUCCESS ) return( ERR_MISS_DIR ); /* 應(yīng)該是打開了目錄,但是返回結(jié)果是打開了文件 */ if ( i != ERR_OPEN_DIR ) return( i ); if ( OldFileCount ) CurrentDirStartClust = CH375vStartCluster; /* 不是根目錄,獲取目錄的起始簇號(hào) */ else { /* 是根目錄,獲取根目錄的起始簇號(hào) */ if ( CH375vDiskFat == DISK_FAT32 ) CurrentDirStartClust = CH375vDiskRoot; /* FAT32根目錄 */ else CurrentDirStartClust = 0; /* FAT12/FAT16根目錄 */ } CH375FileClose( ); /* 對(duì)于根目錄一定要關(guān)閉 */

1、當(dāng)OldFileCount為0時(shí),其中的FileOpen()實(shí)現(xiàn)的是什么? 2、FileOpen()后面的注釋說“打開目錄,僅為了獲取目錄的起始簇號(hào)以提高速度 ”,這句話沒明白什么意思,可不可以解釋一下?

OldFileCount為0表示根目錄,調(diào)用打開函數(shù)是為了獲取根目錄起始簇號(hào),這樣就在該簇所在扇區(qū)查找文件名,不需要全盤搜索,也就提高了速度。


1、根目錄的起始簇號(hào)不是在CH375vDiskRoot這個(gè)變量里嗎?直接賦值不就可以了嗎?為什么一定要FileOpen()? 2、怎么實(shí)現(xiàn)在該簇所在扇區(qū)查找文件名,例程中哪里有體現(xiàn)到?


我一直覺得這句話很奇怪誒:for ( FileCount = 1; OldFileCount < FileCount; OldFileCount ++ ) ,下面的函數(shù)有沒有對(duì)FileCount進(jìn)行加處理,那這個(gè)循環(huán)不就執(zhí)行一次就結(jié)束了嗎?


(1)每個(gè)U盤根目錄起始簇都不一樣,你直接賦值肯定不行。 (2)獲取到目錄的起始簇號(hào),調(diào)用ListFile:列舉指定目錄下的所有文件。 (3)我們的庫里面,每搜索到一個(gè)文件FileOpen都會(huì)調(diào)用xFileNameEnumer回調(diào)程序,在這個(gè)函數(shù)中有對(duì)FileCount的處理。


在CH376中的EXAM13 CH376WriteVar32( VAR_START_CLUSTER, FileNameBuffer[ index ].DirStartClust ); /* 將當(dāng)前目錄的上級(jí)目錄的起始簇號(hào)設(shè)置為當(dāng)前簇號(hào),相當(dāng)于打開上級(jí)目錄 */ printf( "List Directory: %s\n", FileNameBuffer[ index ].Name ); /* 顯示當(dāng)前要列舉的目錄名 */ s = CH376FileOpen( FileNameBuffer[ index ].Name ); /* 打開目錄,僅為了獲取目錄的起始簇號(hào)以提高速度 */ if ( s == USB_INT_SUCCESS ) return( ERR_FOUND_NAME ); /* 應(yīng)該是打開了目錄,但是返回結(jié)果是打開了文件 */ else if ( s != ERR_OPEN_DIR ) return( s ); if ( index ) CurrentDirStartClust = CH376ReadVar32( VAR_START_CLUSTER ); /* 不是根目錄,獲取目錄的起始簇號(hào) */ else CurrentDirStartClust = 0; /* 是根目錄 */ CH376FileClose( FALSE ); /* 對(duì)于根目錄一定要關(guān)閉 */

根目錄的起始簇號(hào)是0?


根目錄起始的簇號(hào)應(yīng)該是2,這個(gè)編號(hào)是從2開始的。你可以讀一下CH376ReadVar32( VAR_START_CLUSTER )的值。


讀了CH376ReadVar32( VAR_START_CLUSTER )的值為2。謝啦


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

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