首先谢谢STUDY的指点 在文件中移动指针的问题已解决。 用参数 0xFF,0xFF,0xFF,0xFF,可以移动到文件末尾。 用参数 0x20,0x00,0x00,0x00,可以向后移动32字节。已通过WINHEZ验证。 但建2级目录,移动指针以写入父簇号没有成功。
偏移位置 见下表 /* FAT数据区中文件目录信息 */ typedef struct _FAT_DIR_INFO { UINT8 DIR_Name[11]; /* 00H,文件名,共11字节,不足处填空格 */ UINT8 DIR_Attr; /* 0BH,文件属性,参考后面的说明 */ UINT8 DIR_NTRes; /* 0CH */ UINT8 DIR_CrtTimeTenth; /* 0DH,文件创建的时间,以0.1秒单位计数 */ UINT16 DIR_CrtTime; /* 0EH,文件创建的时间 */ UINT16 DIR_CrtDate; /* 10H,文件创建的日期 */ UINT16 DIR_LstAccDate; /* 12H,最近一次存取操作的日期 */ UINT16 DIR_FstClusHI; /* 14H */ UINT16 DIR_WrtTime; /* 16H,文件修改时间,参考前面的宏MAKE_FILE_TIME */ UINT16 DIR_WrtDate; /* 18H,文件修改日期,参考前面的宏MAKE_FILE_DATE */ UINT16 DIR_FstClusLO; /* 1AH */ UINT32 DIR_FileSize; /* 1CH,文件长度 */ } FAT_DIR_INFO, *P_FAT_DIR_INFO; /* 20H */ 按以上目录项的规定,如果新建目录的指针偏移0,指向“.”目录项的头,要写入的父簇号高字节的偏移应该是(0x20+0x14),类推,低字节偏移为(0x20+0x1A).其中,0x20 是为了越过子目录中的首个 “.”目录项。 指针偏移数据格式分别为: 父簇号高字节指针偏移 0x34,0x00,0x00,0x00 父簇号低字节指针偏移 0x3A,0x00,0x00,0x00 以上述参数写,用WINHEX看,目录项混乱。
再假定新建目录的指针指向“..”目录项的头,以以下参数移动指针,写父目录簇号 父簇号高字节指针偏移 0x14,0x00,0x00,0x00 父簇号低字节指针偏移 0x1A,0x00,0x00,0x00 以上述参数写,用WINHEX看,目录项仍然混乱。 用CMD_DIR_CREATE 建2级目录,不写父目录起始簇号,除子目录中“。。”目录项没有记录父目录起始簇号外,一切正常。3级目录也一样。 经查验,读出的父目录起始簇号是正确的。 估计还是指针偏移参数不正确引起的问题。我使用的参数的问题在哪里,请指教。谢谢。