标准版U盘文件读写模块,并口查询连接,单片机是内部带1024字节RAM的,在原文件后面追加同样的数据结果怎么老是乱码啊~~~~~
printf( "Open\n" ); memcpy( mCmdParam.Open.mPathName, "\\测量数据.TXT", MAX_PATH_LEN ); i = ExecCommand( CMD_FileOpen, MAX_PATH_LEN ); if ( i == ERR_MISS_FILE ) { printf( "Create\n" ); memcpy( mCmdParam.Create.mPathName, "\\测量数据.TXT", MAX_PATH_LEN ); i = ExecCommand( CMD_FileCreate, MAX_PATH_LEN ); mStopIfError( i ); NewSize = 0; } else { /* 找到文件\测量数据.TXT或者出错 */ mStopIfError( i ); printf( "Query\n" ); i = ExecCommand( CMD_FileQuery, 0 ); /* 查询当前文件的信息,没有输入参数 */ mStopIfError( i ); OldSize = mCmdParam.Modify.mFileSize; /* 原文件的长度 */ SecCount = ( OldSize + 511 ) >> 9; /* (OldSize+511)/512, 计算文件的扇区数,因为读写是以扇区为单位的 */ NewSize = (unsigned short)OldSize; /* 原长度 */ printf( "Size=%ld, Len=%d, Sec=%d\n", OldSize, NewSize, (unsigned short)SecCount );
mCmdParam.Locate.mSectorOffset = 0xFFFFFFFF; i = ExecCommand( CMD_FileLocate, 4 ); mStopIfError( i ); } printf( "Write\n" ); strcpy( DATA_BUF, "abcdef\xd\n"); mCmdParam.Write.mSectorCount = 0x01; /* 写入一个扇区*/ i = ExecCommandBuf( CMD_FileWrite, 1, DATA_BUF ); /* 向文件写入数据 */ /*printf("%d\n",mCmdParam.Write.mSectorCount);*/ mStopIfError( i );
NewSize = NewSize + strlen( DATA_BUF ); /* 新文件的长度 */
printf( "Modify\n" ); mCmdParam.Modify.mFileAttr = 0xff; /* 输入参数: 新的文件属性,为0FFH则不修改 */ mCmdParam.Modify.mFileTime = 0xffff; mCmdParam.Modify.mFileDate = ( (2004-1980)<<9 ) + ( 5<<5 ) + 18; /* 输入参数: 新的文件日期: 2004.05.18 */ mCmdParam.Modify.mFileSize = NewSize; /* 输入参数: 如果原文件较小,那么新的文件长度与原文件一样长,否则被RAM所限 */ i = ExecCommand( CMD_FileModify, 4+2+2+1 ); mStopIfError( i );
mDelaymS( 500 ); printf( "Close\n" ); mCmdParam.Close.mUpdateLen = 0; /* 不要自动计算文件长度,如果自动计算,那么该长度总是512的倍数 */ i = ExecCommand( CMD_FileClose, 1 ); mStopIfError( i );
第一次写的数据是正确的,但是第二次往后面追加的数据就变成乱码了,结果是这样: abcdef o<可Y# 修改文件长度应该不会有问题吧,请达人指点!!