这是读写文件的一部分,这部分在我增加读另一个文件的创建时间之前还能够正确读写, 但是增加了读另外个文件的创建时间(该文件是有创建时间的)后,就不正确了,在创建这个文件时,第一行多出了文件名和几个乱码,在后面追加数据都是正确的,但是就是第一行出错,出现了 OPEN.TXT PX 080307145010 080307145010 080307145016 080307145016 正确的应该为 080307145010 080307145010 080307145016 080307145016 .... 下面是写这个文件OPEN.TXT的部分代码 void WriteOpen(unsigned char flag) //flag为开机时间OPEN_TIME还是关机时间CLOSE_TIME { UINT8 i; UINT8 temp[12]; unsigned int year; unsigned char month,day,hour,minute,second; strcpy( (char *)mCmdParam.Open.mPathName, "/OPEN.TXT" ); /* 文件名,该文件在根目录下 */ i=CH375FileOpen( ); /* 打开文件 */ if(i==ERR_MISS_FILE)//如果没有文件,创建文件 { strcpy((char *)mCmdParam.Create.mPathName, "/OPEN.TXT"); /* 文件名 */ i = CH375FileCreate( ); /* 新建文件并打开,如果文件已经存在则先删除后再新建 */ mStopIfError( i ); } mCmdParam.ByteLocate.mByteOffset = 0xffffffff; //移到文件的尾部 CH375ByteLocate( ); mCmdParam.ByteWrite.mByteCount = 27; //写入27个字节的数据 mCmdParam.ByteWrite.mByteBuffer[12]='\t'; for(i=0;i<12;i++) { mCmdParam.ByteWrite.mByteBuffer[i] = temp[i];//temp[i]中保存的是要写入的字符 mCmdParam.ByteWrite.mByteBuffer[i+13] = temp[i]; } mCmdParam.ByteWrite.mByteBuffer[25]=0x0D; mCmdParam.ByteWrite.mByteBuffer[26]=0x0A; CH375ByteWrite( ); mCmdParam.Close.mUpdateLen = 1; i = CH375FileClose( ); mStopIfError( i );
新增加的读另一个文件的创建时间的程序如下: void GetCreatTimeFromFDT(void) { UINT8 i,j; UINT16 StepNum=sizeof(P_FAT_DIR_INFO),Step; PUINT8 NameBuf; UINT8 tempName[11]; UINT8 Dir_CrtTimeTeenth; //文件创建时间秒数 UINT16 Dir_CrtTime,Dir_CrtDate;//文件创建时间和日期 unsigned int tempyear; NameBuf=tempName; CreatTimeFromFDT.second= 0; CreatTimeFromFDT.minute= 0; CreatTimeFromFDT.hour = 0; CreatTimeFromFDT.day = 0; CreatTimeFromFDT.month = 0; CreatTimeFromFDT.year = 0; strcpy((char *)mCmdParam.Open.mPathName, "/PDEVICE.TXT" ); i=CH375FileOpen( ); /* 打开文件 */ mStopIfError( i );
//打开文件成功后,DISK_BASE_BUF中存放了FDT信息 for(Step=0;Step{ //FDT表前11byte是文件名 NameBuf[ 0 ]=DISK_BASE_BUF[ Step + 0 ]; NameBuf[ 1 ]=DISK_BASE_BUF[ Step + 1 ]; NameBuf[ 2 ]=DISK_BASE_BUF[ Step + 2 ]; NameBuf[ 3 ]=DISK_BASE_BUF[ Step + 3 ]; NameBuf[ 4 ]=DISK_BASE_BUF[ Step + 4 ]; NameBuf[ 5 ]=DISK_BASE_BUF[ Step + 5 ]; NameBuf[ 6 ]=DISK_BASE_BUF[ Step + 6 ]; NameBuf[ 7 ]=DISK_BASE_BUF[ Step + 7 ]; NameBuf[ 8 ]=DISK_BASE_BUF[ Step + 8 ]; NameBuf[ 9 ]=DISK_BASE_BUF[ Step + 9 ]; NameBuf[ 10]=DISK_BASE_BUF[ Step + 10]; if(memcmp( "PDEVICE",NameBuf,7)==0 && NameBuf[ 8 ]=='T'&& NameBuf[ 9 ]=='X'&& NameBuf[ 10]=='T') //文件名匹配 { Dir_CrtTimeTeenth= DISK_BASE_BUF[ Step + 13 ]; Dir_CrtTime = DISK_BASE_BUF[ Step + 14 ] | DISK_BASE_BUF[ Step + 15 ]<<8; Dir_CrtDate = DISK_BASE_BUF[ Step + 16 ] | DISK_BASE_BUF[ Step + 17 ]<<8; CreatTimeFromFDT.second= ( ( (UINT8)( ((Dir_CrtTime )&0x1F) /10) )<<4 )|( ((UINT8)( (Dir_CrtTime )&0x1F) %10) );
if( Dir_CrtTimeTeenth >= 100 && Dir_CrtTimeTeenth < 200 ) CreatTimeFromFDT.second++; CreatTimeFromFDT.minute= ( ( ((UINT8)( (Dir_CrtTime>>5 )&0x3F) /10) )<<4 )|( ((UINT8)( (Dir_CrtTime>>5 )&0x3F) %10) ); CreatTimeFromFDT.hour = ( ( ((UINT8)( (Dir_CrtTime>>11)&0x1F) /10) )<<4 )|( ((UINT8)( (Dir_CrtTime>>11)&0x1F) %10) ); CreatTimeFromFDT.day = ( ( ((UINT8)( (Dir_CrtDate )&0x1F) /10) )<<4 )|( ((UINT8)( (Dir_CrtDate )&0x1F) %10) ); CreatTimeFromFDT.month = ( ( ((UINT8)( (Dir_CrtDate>>5 )&0x0F) /10) )<<4 )|( ((UINT8)( (Dir_CrtDate>>5 )&0x0F) %10) ); tempyear=(Dir_CrtDate>>9 )&0x7F-20;//1980-2000 CreatTimeFromFDT.year = ( ( (UINT8)( tempyear /10) )<<4 )|( (UINT8)( tempyear %10) ); break; } 请问这是这是怎么一会事呢? } mCmdParam.Close.mUpdateLen = 0; //不更新文件长度 i = CH375FileClose( ); mStopIfError( i ); }