UINT8 SetFileCreateTime( UINT16 iCreateDate, UINT16 iCreateTime ) { UINT8 i; P_FAT_DIR_INFO mFileDir; i = CH375FileOpen( ); /* 打开文件 */ if ( i == ERR_SUCCESS ) { /* 文件读写操作等... */ i = CH375FileQuery( ); /* 查询文件属性,以便将相关数据调到内存中再修改 */ if ( i == ERR_SUCCESS ) { mFileDir = (P_FAT_DIR_INFO)( (PUINT8X)(&DISK_BASE_BUF[0]) + CH375vFdtOffset ); /* 在内存中,当前FDT的起始地址 */ // mFileDir -> DIR_CrtTime = iCreateTime; /* 文件创建的时间,适用于小端格式 */ mFileDir -> DIR_CrtTime = SwapUINT16( iCreateTime ); /* MCS51单片机是大端格式 */ // mFileDir -> DIR_CrtDate = iCreateDate; /* 文件创建的日期,适用于小端格式 */ mFileDir -> DIR_CrtDate = SwapUINT16( iCreateDate ); /* MCS51单片机是大端格式 */
// mFileDir -> DIR_WrtTime = MAKE_FILE_TIME( 时, 分, 秒 ); /* 文件修改时间 */ // mFileDir -> DIR_LstAccDate = MAKE_FILE_DATE( 年, 月, 日 ); /* 最近一次存取操作的日期 */
/* 以下将修改过的内容从内存中真正刷新到U盘中 */ mCmdParam.Modify.mFileAttr = mFileDir -> DIR_Attr; /* 准备假修改文件属性,实际保持原值 */ mCmdParam.Modify.mFileDate = mCmdParam.Modify.mFileTime = 0xFFFF; /* 不修改文件日期和时间 */ mCmdParam.Modify.mFileSize = 0xFFFFFFFF; /* 不修改文件长度 */ i = CH375FileModify( ); /* 实际是将内存中刚刚修改过的文件名保存 */ if ( i == ERR_SUCCESS ) { /* 文件读写操作等... */ mCmdParam.Close.mUpdateLen = 0; i = CH375FileClose( ); /* 关闭文件 */ } } } return( i ); }
在这个函数里面,有个地方我始终都没有理解. 问题是这样的: 在前面: // mFileDir -> DIR_CrtTime = iCreateTime; /* 文件创建的时间,适用于小端格式 */ mFileDir -> DIR_CrtTime = SwapUINT16( iCreateTime ); /* MCS51单片机是大端格式 */ // mFileDir -> DIR_CrtDate = iCreateDate; /* 文件创建的日期,适用于小端格式 */ mFileDir -> DIR_CrtDate = SwapUINT16( iCreateDate ); /* MCS51单片机是大端格式 */
这一段修改了创建时间和日期,而后面又是: mCmdParam.Modify.mFileAttr = mFileDir -> DIR_Attr; /* 准备假修改文件属性,实际保持原值 */ mCmdParam.Modify.mFileDate = mCmdParam.Modify.mFileTime = 0xFFFF; /* 不修改文件日期和时间 */ mCmdParam.Modify.mFileSize = 0xFFFFFFFF; /* 不修改文件长度 */
这个应该是不修改时间和日期函数. 我总觉得这两个是一个矛盾的地方,不知道是不是我的理解有误,能我解释一下吗???非常感谢!!!