CH376S在U盘中创建文件时,默认文件的创建时间为2004年1月1日,0时0分。 我用下面的程序流程试图修改该创建时间及其文件最后更改的时间,不成功。 void ModifyFileProperty() { UINT8 s = 0; UINT8 len = 0; UINT8 data_buf[100] = {0}; s = CH376DirInfoRead(); mStopIfError(s); len = CH376ReadBlock(data_buf); data_buf[0x0e] = MAKE_FILE_TIME( 14, 59, 01 ); data_buf[0x10] = MAKE_FILE_DATE( 11, 10, 21 ); s = CH376DirInfoRead(); mStopIfError(s); /*MAKE_FILE_TIME( h, m, s ); MAKE_FILE_DATE( y, m, d );*/ CH376WriteOfsBlock(&buf[0x0e],0x0e,4); mStopIfError(s); s = CH376DirInfoSave(); mStopIfError(s); CH376EndDirInfo(); } 程序执行到最后一个语句CH376EndDirInfo();时,没有返回,出现死机现象。 大家帮忙看看这个流程有什么问题
参考EXAM10,提供了详细的步骤。检查一下你的程序是否和EXAM10流程一样
参考EXAM10里面的函数SetFileCreateTime(),程序能正常执行下去,可是文件创建时间并没有正常修改,仍然是2004-1-1 0:00,为什么? UINT8 SetFileCreateTime( PUINT8 iFileName, UINT16 iCreateDate, UINT16 iCreateTime ) { UINT8 s; s = CH376FileOpen( iFileName ); /* 打开文件 */ if ( s == USB_INT_SUCCESS ) { /* 文件读写操作等... */ s = CH376DirInfoRead( ); /* 读取当前文件的目录信息FAT_DIR_INFO,将相关数据调到内存中 */ if ( s == USB_INT_SUCCESS ) { buf[0] = (UINT8)iCreateTime; /* 文件创建的时间,低8位在前 */ buf[1] = (UINT8)(iCreateTime>>8); /* 文件创建的时间,高8位在后 */ CH376WriteOfsBlock( buf, STRUCT_OFFSET( FAT_DIR_INFO, DIR_CrtTime ), 2 ); /* 向内部缓冲区偏移地址DIR_CrtTime写入2个字节 */ buf[0] = (UINT8)iCreateDate; /* 文件创建的日期,低8位在前 */ buf[1] = (UINT8)(iCreateDate>>8); /* 文件创建的日期,高8位在后 */ CH376WriteOfsBlock( buf, STRUCT_OFFSET( FAT_DIR_INFO, DIR_CrtDate ), 2 ); /* 向内部缓冲区偏移地址DIR_CrtDate写入2个字节 */ s = CH376DirInfoSave( ); /* 保存文件的目录信息 */ if ( s == USB_INT_SUCCESS ) { /* 成功修改并保存 */ /* 文件读写操作等... */ } } CH376FileClose( FALSE ); /* 关闭文件 */ } return( s ); }
调用的UINT8 SetFileCreateTime( PUINT8 iFileName, UINT16 iCreateDate, UINT16 iCreateTime )函数如下,请求大家帮忙看看 UINT8 WriteTitle(PUINT8 pdata) { UINT8 s; PUINT8 strname = "/DATA.CSV"; /*CSV*/ UINT8 ret[10] = {0x20,0x20,0x0d,0x0a}; /*if file exist,add data to the end of the file,else create file*/ s=CH376FileOpen(strname); /* 打开文?,该文?在根目录下 */ mDelaymS(1); if(s==USB_INT_SUCCESS) { s = CH376ByteLocate(0xFFFFFFFF); /* 移到文?的尾部 */ mStopIfError(s); s = CH376ByteWrite(ret,4,NULL); mStopIfError(s); } else if(s==ERR_MISS_FILE) { s=CH376FileCreate(NULL); /* 新建文?并打开,如果文?已经存在则先删?后再新建,不必再提供文?名,刚才已经提供给CH376FileOpen */ mStopIfError(s); CH376FileClose(FALSE); mDelaymS(20); s = SetFileCreateTime( strname, MAKE_FILE_DATE( 2011, 10, 31 ), MAKE_FILE_TIME( 10, 33, 54 ));/*0x180a, 0x2709.Date:10/18,time:09:39*/ mStopIfError(s); s=CH376FileOpen(strname); if(s==USB_INT_SUCCESS) { s = CH376ByteWrite(pdata,strlen(pdata),NULL); mStopIfError(s); UpdateFileSize(); mStopIfError(s); } else { mStopIfError(s); } } else mStopIfError(s); /* 打开文?时出错 */ /* 注意字符串长度不能溢出buf,否则加大缓冲区或者分多次写入 */ /*s = (UINT8)sprintf(buf,pdata); s=CH376ByteWrite(buf,s,NULL);*/ /*s = CH376ByteWrite(pdata,strlen(pdata),NULL); /* 以字节为单位向文?写入?据 */ /*CH376FileClose(TRUE);*/ return s; }
你在修改文件名字之前已经都把文件给关闭了,那怎么修改时间呢?
搞定了,谢谢