不能动态创建文件并修改时间

我用的ch376T,采用公司例程,发现 (1)在U盘创建文件时,用例程仿真时成功的在U盘创建了文件MY_ADC.TXT,单我用程序中的时钟时间(ds1302)动态的创建文件名称时,仿真时成功,把U盘拿到计算机上检查,在U盘中发现该文件,但无法打开该文件,提示是该文件非法; (2)同时,无法修改文件的创建时间

void writefiledata(void) { unsigned char s,u; //保存CH376的操作状态或出错代码 unsigned char buf[126]; char filename_now[32];

if( CH376DiskConnect( ) != USB_INT_SUCCESS ) return;

Delay(0xAFFFF); for ( s = 0; s < 10; s ++ ) { /* 最长等待时间,10*50mS */ Delay(0xAFFFF);Delay(0xAFFFF); Delay(0xAFFFF);Delay(0xAFFFF); u = CH376DiskMount( ); /* 初始化磁盘并测试磁盘是否就绪 */ if ( u == USB_INT_SUCCESS ) break; /* 准备好 */ } //定义文件名称,原来用"/MY_ADC.TXT"成功创建文件并能在计算机上打开并读出数据 //现在,用新定义的文件名来进行下面的文件创建并写数据,操作好象没有问题,在U盘上存在该文件, //但在计算机上不能打开该文件,说该文件是不存在的. for(s=0;s<32;s++) filename_now[s]=0; sprintf( filename_now, "/%02d%02d%02d.txt", month, day, hour);

//s = CH376FileOpen( "/MY_ADC.TXT" ); /* 打开文件,该文件在根目录下 */ s = CH376FileOpen( filename_now ); /* 打开文件,该文件在根目录下 */ if ( s == USB_INT_SUCCESS ) { /* 文件存在并且已经被打开,移动文件指针到尾部以便添加数据 */ s = CH376ByteLocate( 0xFFFFFFFF ); /* 移到文件的尾部 */ } else {//if ( s == ERR_MISS_FILE ) { /* 没有找到文件,必须新建文件 */ s = CH376FileCreate( NULL ); /* 新建文件并打开,如果文件已经存在则先删除后再新建,不必再提供文件名,刚才已经提供给CH376FileOpen */ } //else mStopIfError( s ); /* 打开文件时出错 */ for(u=0;u<200;u++){ s=sprintf(buf,"%03d,%03d,%03d,%03d,%03d,%03d,%03d,%03d,%03d,%03d\xd\xa",u,u,u,u,u,u,u,u,u,u); s = CH376ByteWrite( buf, s, NULL ); // 以字节为单位向文件写入数据 } s = CH376FileClose( TRUE ); /* 关闭文件,自动计算文件长度,以字节为单位写文件,建议让程序库关闭文件以便自动更新文件长度 */

/* 为指定文件设置创建日期和时间 */ /* 为指定文件设置创建日期和时间 */ //现在,不能修改文件创建日期和时间 s = SetFileCreateTime( filename_now, MAKE_FILE_DATE( 2000+year, month, day ), MAKE_FILE_TIME( hour, minute, second ) ); while ( CH376DiskConnect( ) == USB_INT_SUCCESS ) { /* 检查U盘是否连接,等待U盘拔出 */ Delay(0xAFFFF); } }

/* 为指定文件设置创建日期和时间 */ /* 输入参数: 原始文件名在iFileName中, 新的创建日期和时间: iCreateDate, iCreateTime */ /* 返回状态码: USB_INT_SUCCESS = 设置成功, 其它状态码参考CH376INC.H */ unsigned char SetFileCreateTime( PUINT8 iFileName, unsigned int iCreateDate, unsigned int iCreateTime ) { unsigned char s; unsigned char buf[64];

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 ); }

第一次您新建的文件能在在PC上看到么?能打开写么?sprintf( filename_now, "/%02d%02d%02d.txt", month, day, hour);用sprintf复制要特别小心,稍有不当就会出错。iFileName里面的内容您最好通过串口打印出来,看是不是您要创建或打开的文件名,文件名得大写,且不能超过8个字符(不算3个字符的格式名)


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