您好,原子哥,看了好久还是没看懂,中在中间有几个疑问了,
if(item->deAttributes == 0x0f) //得到一个长文件名
{ //应该是长文件名时,属性就会是0x0f
we = (winentry *)(&fat_buffer[offset]);
j = 26 *( (we->weCnt-1) & WIN_CNT);// WIN_CNT定义为0x3f-----0011 1111
//因为一个32字节中有26个字节是存文件名的,上面得到记录长文件名的32字节个数,
//得到J就是总个长文件名的字节数了,
if(j<MAX_LONG_NAME_SIZE-25) //为什么要减25呢???
{
p = &LongNameBuffer[j];//p指向长文件名的存放地址
for (j=0;j<10;j++) *p++ = we->wePart1[j];
for (j=0;j<12;j++) *p++ = we->wePart2[j];
for (j=0;j<4;j++) *p++ = we->wePart3[j];
//通过上面四条语名,就把放置在三个位置的长文件名拼合起来放在LongNameBuffer数组中了,
if (we->weCnt & 0x40) //这个if不理解啊,,,,
(*(unsigned int *)p) = 0;
if ((we->weCnt & WIN_CNT) == 1)
// weCnt 为1时,表长文件名最后一个目录项,就可置长文件名标志为1了,
LongNameFlag = 1;
----------------------------------------------------------------------------------------------------------------------------------------------------
上面MAX_LONG_NAME_SIZE为什么要减25呢?
if (we->weCnt & 0x40) (*(unsigned int *)p) = 0;
//这个if的作用是做什么呢?,,,,
最后那个LongNameFlag = 1;置1了但没有对他计数呀,,假始那扇区下有很多个长文件名呢??
谢谢了啊,,
|