读不懂!!!

for ( CurrentDir = DISK_BUFFER; CurrentDir[0] != 0; CurrentDir += 32 ) { if ( ( CurrentDir[0x0B] & 0x08 ) == 0 && CurrentDir[0] != 0xE5 ) { CurrentDir[0x0B] = 0; /* 为了便于显示,设置文件名或者目录名的结束标志 */ printf( "Name: %s\n", CurrentDir ); /* 通过串口输出显示 */ } }

上面的程序读不懂,请问是怎样显示文件名的/再有文件的文件名和数据在U盘上是怎样存储的? 个人理解是按规定在一串数据中固定位置的字节表示文件名!比如一个文件存放是根据起始扇区号和大小确定文件位置的,在这个区间的数据包括文件名和文件数据,文件名规定放在一段位置,这样理解对吗? 请高手指点一下!

这些信息你都需要去看下FAT文件系统,实际在文件系统里面的0X0B位代表的是文件的属性


每个文件名的信息为32个字节 第一个字节为0XE5代表文件已经被删除,0X0B代表文件属性0X20代表存档,0X08代表卷标. 让文件名最后一个字节为0,这样只是方面打印字符串.整个文件名定义如下: typedef struct{ char FileName[8]; //ofs:0.文件名 char ExtName[3]; //ofs:8.扩展名 uchar attribute; //ofs:11.文件属性。典型值:存档(0x20)、卷标(0x08)。 char reserved[10]; //ofs:21.保留 uint time; //ofs:22.时间 uint data; //ofs:24.日期 uint StartClus; //ofs:26.开始簇号 ulong FileLength; //ofs:28.文件长度 }DIR_tag;


(1)文件名在FAT文件系统中属于目录项范畴与文件内容不在同一个区域,目录项中有起始簇号指示文件内容的起始位置 (2)目录项一般是32字节大小,上述程序中目录项存在DISK_BUFFER中,通过if语句判断是否是需要的目录项。 (3)关于目录项的分析,请参考FAT32文件系统说明


只有登录才能回复,可以选择微信账号登录