求大神,读取SD卡中FAT32系统的文本出错是什么原因

2019-07-20 06:37发布

简单描述要实现的功能:分步将几个数组中的字符串存储在SD卡txt文本上,并在需要的时候读取该文本内容,显示在屏幕
            但现在问题是:创建并且存储txt文本正常,卸卡后可通过电脑正确读出全部存储的数据,但通过f_read函数只能读出数组1中的数据,数组2、3...中的数据读不出来,更奇怪的是,如果将该文本在电脑上打开并且重新保存(不修改文本内容直接Ctrl+S)后,再次用通过f_read函数读取文本内容,就可以正常读出所有数据了,下面附上部分读写代码,不知道是不是版本兼容的问题(R0.09),请大神赐教
代码

将要存储的字符串:
BYTE FileBuffer1[] = "TianJinYLA Portable Gas Detector ";
BYTE FileBuffer2[] = " DATE TIME DATA ";

数据存储代码:
f_mount(0,&fs);        //磁盘信息注册
        res = f_open(&fdst,SDFileName,FA_CREATE_NEW | FA_WRITE);//新建一个文件
        if (( res == FR_OK )||(res == FR_EXIST))
        {
                res = f_write(&fdst, FileBuffer1, sizeof(FileBuffer1), &bw);        //便携式气体检测仪数据
                res = f_lseek(&fdst, fdst.fsize);//移动到文本最后一个字节
                res = f_write(&fdst,"GAS: ", 5, &bw);
                res = f_lseek(&fdst, fdst.fsize);//移动到文本最后一个字节
                switch(Gas_num)
                {
                        case 1:res = f_write(&fdst,"O2/%VOL", 7, &bw);break;
                        case 2:res = f_write(&fdst,"H2S/PPM", 7, &bw);break;
                        case 3:res = f_write(&fdst,"NH3/PPM", 7, &bw);break;
                        case 4:res = f_write(&fdst,"CO/PPM", 6, &bw);break;
                        case 5:res = f_write(&fdst,"HCL/PPM", 7, &bw);break;
                        case 6:res = f_write(&fdst,"SO2/PPM", 7, &bw);break;
                        case 7:res = f_write(&fdst,"CL2/PPM", 7, &bw);break;
        //                case 8:res = f_write(&fdst,"可燃气体/LEL", 14, &bw);break;
                        default:break;
                }
                res = f_lseek(&fdst, fdst.fsize);//移动到文本最后一个字节
                res = f_write(&fdst," ID: ", 6, &bw);
                res = f_lseek(&fdst, fdst.fsize);//移动到文本最后一个字节
                res = f_write(&fdst, IDbuf, 2, &bw);        //日期 时间 气体浓度       
                       
                res = f_lseek(&fdst, fdst.fsize);//移动到文本最后一个字节
                res = f_write(&fdst, FileBuffer2, sizeof(FileBuffer2), &bw);        //日期 时间 气体浓度
                f_close(&fdst);

          }
读取文本内容并打印代码:
res = f_open(&fdst,SDFileName_Open,FA_OPEN_ALWAYS | FA_READ);//打开当前索引下的文本
                if(!res)
                {
                        if(!f_read(&fdst,&buf_data,512,&num_temp))
                        {
                                #ifdef Debug
                                //printf("%s", SDFileName_Open);//长文件名
                                printf("%s", buf_data);//长文件名
                                #endif
                                Clect_Text(buf_data);//将SD文件内容显示到GUI界面
                        }
                }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。