首先謝謝STUDY的指點 在文件中移動指針的問題已解決。 用參數(shù) 0xFF,0xFF,0xFF,0xFF,可以移動到文件末尾。 用參數(shù) 0x20,0x00,0x00,0x00,可以向后移動32字節(jié)。已通過WINHEZ驗證。 但建2級目錄,移動指針以寫入父簇號沒有成功。

偏移位置 見下表 /* FAT數(shù)據(jù)區(qū)中文件目錄信息 */ typedef struct _FAT_DIR_INFO { UINT8 DIR_Name[11]; /* 00H,文件名,共11字節(jié),不足處填空格 */ UINT8 DIR_Attr; /* 0BH,文件屬性,參考后面的說明 */ UINT8 DIR_NTRes; /* 0CH */ UINT8 DIR_CrtTimeTenth; /* 0DH,文件創(chuàng)建的時間,以0.1秒單位計數(shù) */ UINT16 DIR_CrtTime; /* 0EH,文件創(chuàng)建的時間 */ UINT16 DIR_CrtDate; /* 10H,文件創(chuàng)建的日期 */ 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 */ 按以上目錄項的規(guī)定,如果新建目錄的指針偏移0,指向“.”目錄項的頭,要寫入的父簇號高字節(jié)的偏移應(yīng)該是(0x20+0x14),類推,低字節(jié)偏移為(0x20+0x1A).其中,0x20 是為了越過子目錄中的首個 “.”目錄項。 指針偏移數(shù)據(jù)格式分別為: 父簇號高字節(jié)指針偏移 0x34,0x00,0x00,0x00 父簇號低字節(jié)指針偏移 0x3A,0x00,0x00,0x00 以上述參數(shù)寫,用WINHEX看,目錄項混亂。

再假定新建目錄的指針指向“..”目錄項的頭,以以下參數(shù)移動指針,寫父目錄簇號 父簇號高字節(jié)指針偏移 0x14,0x00,0x00,0x00 父簇號低字節(jié)指針偏移 0x1A,0x00,0x00,0x00 以上述參數(shù)寫,用WINHEX看,目錄項仍然混亂。 用CMD_DIR_CREATE 建2級目錄,不寫父目錄起始簇號,除子目錄中“。。”目錄項沒有記錄父目錄起始簇號外,一切正常。3級目錄也一樣。 經(jīng)查驗,讀出的父目錄起始簇號是正確的。 估計還是指針偏移參數(shù)不正確引起的問題。我使用的參數(shù)的問題在哪里,請指教。謝謝。