CH376文件不能正确打开!

创建了一个"/AD.TXT\0"的文件,可以写数据;但是关闭后再打开时候出现错误,

显示的是:文件并没有被正确打开



显示的是:

创建一个TXT文件成功!

需要写入TXT的数据量为:24

TXT文本数据写入成功!

TXT文本创建并写入完成!


文件打开成功!

文件定位失败--180



我的文件setfilename程序:

void CH376SetFileName( alt_8 *Name ) 

{

    alt_u8  i; 

    alt_8  c;  

    for( i = 40; i != 0; --i ) 

    {

        c = *Name;

        write_data_to_usb( c );

        if( c == 0 ) 

        {

            break;

        }

        Name ++;

    }

}



主程序:

//新建一个名为AD.TXT的文件

    printf("\n创建一个TXT文件");

    write_command_to_usb(SET_FILE_NAME);//送“设置文件名”命令

    CH376SetFileName("/AD.TXT\0");

    write_command_to_usb(FILE_CREATE);  //送“新建文件”命令

    while(ch375_intflag != 1);  //等待中断产生

    ch375_intflag = 0;  //清除CH376中断标志位

    if(ch375_status == USB_INT_SUCCESS) //请求继续写入

    {

        printf("成功!\n");

    }

    else

    {

        printf("失败--%d\n",ch375_status);

        while(1);

    }


    //往新建文件写入一串数据“AD数据采集实时存储:”

    write_command_to_usb(BYTE_WRITE);   //以字节为单位从当前位置写入数据块

    write_data_to_usb(24);  

    write_data_to_usb(0);

    while(ch375_intflag != 1);  //等待中断产生

    ch375_intflag = 0;  //清除CH376中断标志位

    if(ch375_status == USB_INT_DISK_WRITE)  //请求继续写入

    {

        write_command_to_usb(WR_REQ_DATA);  //向内部指定缓冲区写入请求的数据块

        printf("需要写入TXT的数据量为:%d\n",read_data_from_usb());

    }

    else

    {

        printf("\nTXT文本数据写入失败--%d\n",ch375_status);

        while(1);

    }


    //send_string_to_usb1("AD数据采集实时存储:\r\n"); 

    send_string_to_usb("AD数据采集实时存储:\r\n",20+4);     //送字符串“AD数据采集实时存储:”

    write_command_to_usb(BYTE_WR_GO);   //继续字节写

    while(ch375_intflag != 1);  //等待中断产生

    ch375_intflag = 0;  //清除CH376中断标志位

    if(ch375_status == USB_INT_SUCCESS) //请求继续写入

    {

        printf("TXT文本数据写入成功!\n");

    }

    else

    {

        printf("TXT文本数据写入失败--%d\n",ch375_status);

        while(1);

    }

    write_command_to_usb(FILE_CLOSE);   //关闭当前已经打开的文件或目录

    write_data_to_usb(1);   //允许自动更新文件长度

    printf("TXT文本创建并写入完成!\n\n");  

            

            write_command_to_usb(SET_FILE_NAME);//送“设置文件名”命令 

            CH376SetFileName("/AD.TXT\0");

            write_command_to_usb(FILE_OPEN);    //送“打开文件或目录,枚举文件和目录”命令

            while(ch375_intflag != 1);  //等待中断产生

            ch375_intflag = 0;  //清除CH376中断标志位

            if(ch375_status == USB_INT_SUCCESS) //请求继续写入

            {

                printf("文件打开成功!\n");

            }

            else

            {

                printf("文件打开失败--%d\n",ch375_status);

                while(1);

            }



我试了一下,

write_command_to_usb(SET_FILE_NAME);//送“设置文件名”命令 

            CH376SetFileName("/AD.TXT\0");

            write_command_to_usb(FILE_OPEN);    //送“打开文件或目录,枚举文件和目录”命令

改成:

write_command_to_usb(SET_FILE_NAME);//送“设置文件名”命令 

            CH376SetFileName("/A.TXT\0");

            write_command_to_usb(FILE_OPEN);    //送“打开文件或目录,枚举文件和目录”命令

显示的也是:

文件打开成功!


能解释一下是为什么么?



你的设置文件名有问题,写入文件名的时候你写多了,应该加上判断条件if ( c == '\' || c == '/' ) c = 0; //强行截止文件名。


试了一下用下面的程序:

void CH376SetFileName( alt_8 *Name ) 

{

    alt_8  c;  

    c = *Name;

    write_data_to_usb( c );

    while ( c ) {

        Name ++;

        c = *Name;

        if ( c == 0x2F || c == 0x5C ) c = 0;  /* 强行将文件名截止 */

        write_data_to_usb( c );

    }

}

还是出现同样的现象!


我们的函数在FILE_SYS.C里面有现成的函数,你试下有没有问题。


试了,我用的就是贵公司提供的例程。

文件可以创建成功,创建成功后进行写数据、定位都可以。但是关闭之后就不能再打开了,不知道为什么?


现在发现一个问题,如果前面关闭文件后,不更新文件长度,那么就能打开文件定位成功。

    write_command_to_usb(FILE_CLOSE);   //关闭当前已经打开的文件或目录

    write_data_to_usb(0);   //允许自动更新文件长度

    printf("TXT文本创建并写入完成!\n");  



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