DIR_CrtTime与mCmdParam.Modify.mFileTime

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; /* 不修改文件长度 */

这个应该是不修改时间和日期函数. 我总觉得这两个是一个矛盾的地方,不知道是不是我的理解有误,能我解释一下吗???非常感谢!!!

前面的是修改文件的创建时间,后面的是修改文件的属性,修改时间以及文件长度,两者不矛盾


mCmdParam.Modify.mFileDate = mCmdParam.Modify.mFileTime = 0xFFFF; /* 不修改文件日期和时间 */ 不太明白!!! 与上面哪个时间有关呢????


你不用这个例子试的话,那么你新建的文件是没有创建时间的,这个例子是可以有创建时间的,可以修改创建时间,而你提到的这个是文件的修改时间,为0XFFFF的时候是不修改的,这个和创建时间的修改是没什么关系的


那我的理解是: 如果 // mFileDir -> DIR_WrtTime = MAKE_FILE_TIME( 时, 分, 秒 ); /* 文件修改时间 */ // mFileDir -> DIR_LstAccDate = MAKE_FILE_DATE( 年, 月, 日 ); /* 最近一次存取操作的日期 */ 这两行程序没有被屏蔽掉,而是设置了修改时间和最后访问日期的话, 那么就不能设置为"0XFFFF",而是将修改时间和日期填写进去,对吗??? 我的理解是这样的,不知道是否正确!!


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