www.pudn.com > fat32.c51.rar > FAT32LISTDIRECTORY.C


#ifndef _FAT32_DEFINE 
 #include "FAT32.c" 
#endif 
 
BYTE FAT32ListDirectory(void); 
 
BYTE FAT32ListDirectory(void) 
{ 
	xdata BYTE i,j,k,m,n; 
	xdata DWORD chain; 
	xdata CHAR temp[27]; 
 
//	filename=(CHAR *)malloc(sizeof(j*26+1)); 
 
	chain=FAT32.CurrentDirectory; 
	FAT32.ClusSecCnt=0; 
	while(chain!=0x0fffffff) 
	{ 
		FAT32ReadCluster(&chain); 
		for (i=0;i<16;i++) 
		{ 
			if (sDIR[i].Name[0]==0xe5||sDIR[i].Name[0]==0x00) continue;			//空目录项跳过 
			MEMSwap32(sDIR[i].FileSize); 
			if ((sDIR[i].Attr&FAT32_ATTR_LONG_NAME_MASK)==FAT32_ATTR_LONG_NAME) 
			//长文件名 
			{ 
				j=lDIR[i].Ord - FAT32_LAST_LONG_ENTRY; 
				LongFileName[0]=0;n=0; 
				for(;j>0;j--) 
				{ 
					FAT32GetPartLongName(lDIR+i,temp); 
					m=strlen((char *)temp); 
					k=m+n; 
					for(;n>0;n--) 
						LongFileName[m+n]=LongFileName[n]; 
					LongFileName[m+n]=LongFileName[n]; 
					m--; 
					for(;m>0;m--) 
						LongFileName[m]=temp[m]; 
					LongFileName[m]=temp[m]; 
					n=k; 
					i++; 
					if (i==16) 
					{ 
						FAT32ReadCluster(&chain); 
						i=0; 
					} 
				} 
				printf("%s\t",LongFileName); 
				if (sDIR[i].Attr&FAT32_ATTR_DIRECTORY) printf("\t"); else printf("\t"); 
				printf("\t%ld",MEMSwap32(sDIR[i].FileSize)); 
				printf("\n"); 
			} 
			else 
			{ 
			//短文件名 
				if (sDIR[i].Name[0]!=0xe5&&sDIR[i].Name[0]!=0x00) 
				{ 
					if (sDIR[i].Attr&FAT32_ATTR_VOLUME_ID) 
						printf("Driver Volume:"); 
					for(j=0;j<11;j++) 
						printf("%c",sDIR[i].Name[j]); 
					if (sDIR[i].Attr&FAT32_ATTR_DIRECTORY) printf("\t"); else printf("\t"); 
					printf("\t%ld",MEMSwap32(sDIR[i].FileSize)); 
					printf("\n"); 
				} 
			} 
		} 
	} 
	return(0); 
}