阅读:1534回复:6
遍历根目录中的文件?(50分)
各位帮我看看我得理解对不对?
是不是说目录项中的文件名的第一个字符如果为E5或者00就说明是最后一个目录项?如果是这样的话对于非根目录的目录区只要看是否有E5或00开头的目录项即可! 可是对于根目录好像比较特殊吧?我用Winhex查看了我的U盘的根目录区,U盘是FAT16,每簇4个扇区.根目录区占用32个扇区,也就是占用4个簇.是不是说每簇中的目录项的文件名的第一个字符为E5或者是00就说明该簇已经没有有用的文件了?然后再在另外的三个簇中寻找最后一个目录项?可是我却发现在最后一个目录项所在的簇后面还是有非E5和00的目录项存在. 不知道对于根目录区该如何遍历文件? |
|
沙发#
发布于:2004-04-01 10:18
诚如楼上两位所说的,我看了FAT的白皮书,确实是00结束!都怪小弟没有事先看白皮书,呵呵,打扰大家了!给分了!
|
|
板凳#
发布于:2004-04-01 08:28
U盘分五个区:
MBR Hidden Sector DBR FAT1 FAT2 FDT (根目目录) DATA 遍历根目录是一件很简单的事,因位它是一个固定大小,固定位置存放目录项列表的数据区。给一段我写的根目录遍历的代码给你看看就明白了。(E5代表文件已经被删除的意思)具体的查一下,优盘文件系统(FOR C)好象精华区有下载。 根目录的文件项的大小在DBR->BPB_wRootEntry中设置。 FDT_ADDR = 0x8000 DATA_ADDR = 0xc000 DBR->BPB_wRootEntry = 512 Example:currentFileLocate = FDT_ADDR FAT_FileFindNext("*.mp3) unsigned int FAT_FileFindNext(unsigned int *pch) { unsigned int i, ch[11],ic[2]; for(i=0; i<11; i++) { if(*pch == '.') { pch++; i=8; } ch=*pch++; } while(currentFileLocate < DATA_ADDR) { NF_ReadMultiByte(currentFileLocate, 32, (unsigned int)&fileDirEntry ); currentFileLocate+=0x20; if( fileDirEntry.ExtName[0] == ch[8] && fileDirEntry.ExtName[1] == ch[9] && fileDirEntry.ExtName[2] == ch[10] ) {//Finded File fileHandler.StartClus = fileDirEntry.StartClus[1]*0x100 + fileDirEntry.StartClus[0]; fileHandler.CurrentClus = fileHandler.StartClus; #if FAT16 NF_ReadMultiByte(FAT1_ADDR + ((fileHandler.CurrentClus-1)*2), 2, ic); fileHandler.NextClus=(ic[1]&0xff)*0x100 + (ic[0]&0xff); #else NF_ReadMultiByte(FAT1_ADDR + ((fileHandler.CurrentClus * 1.5)), 2, ic); if(fileHandler.CurrentClus & 0x01) {//Odd Number //Get IC[0].Hight 4 Bit fileHandler.NextClus= ( (ic[0]>>4)&0x0f ) | ((ic[1]<<4)&0x0ff0); } else {//Even Number fileHandler.NextClus= ic[0] | ((ic[1]<<8) & 0x0f00); } #endif fileHandler.FileLen = fileDirEntry.FileLength[0] + fileDirEntry.FileLength[1]*0x100 + fileDirEntry.FileLength[2]*0x10000 + fileDirEntry.FileLength[3]*0x1000000; fileHandler.FileCount=0x0000; return(TRUE); } } return(FALSE); //Not Find File } |
|
地板#
发布于:2004-03-31 23:30
其实简单一点说就是我想知道在遍历目录里的文件的时候,什么时候结束! 是00结束,E5不行 |
|
地下室#
发布于:2004-03-31 21:35
其实简单一点说就是我想知道在遍历目录里的文件的时候,什么时候结束!
|
|
5楼#
发布于:2004-03-31 21:32
hehe不好意思,讲的有点罗索!我的mail:zgq@cdut.edu.cn谢谢!
|
|
6楼#
发布于:2004-03-31 20:50
晕 发个MAIL我给你
sunshangxin@163.com |
|
|