野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13805|回复: 2

关于FATFS文件系统的问题

[复制链接]
发表于 2017-3-3 18:28:48 | 显示全部楼层 |阅读模式
第一个问题  
在打开文件第一次写入数据之后我调用了f_lseek(&fnew,f_size(&fnew)) 把指针指向了文件的最后
然后重新写入了一个数据

在读取的时候,读取的数据大小是正确的,但是得出来的ReadBuffer只显示第一次写入的数据


第二个问题
如果写入一次数据,关闭文件,再写入一次数据的话,那么读出来的数据只有一个,也就是后面一次数据把第一次的给覆盖了

求大神解答是哪里除了问题啊

以下是代码
printf("\r\n****** 即将进行文件写入测试... ******\r\n");       
        res_sd = f_open(&fnew, "0:FatFsWRTest.txt",FA_CREATE_ALWAYS | FA_WRITE );
        if ( res_sd == FR_OK )
        {
                printf("》打开/创建FatFs读写测试文件.txt文件成功,向文件写入数据。\r\n");
                /* 将指定存储区内容写入到文件内 */
                res_sd=f_write(&fnew,WriteBuffer,sizeof(WriteBuffer),&fnum);
                if(res_sd==FR_OK)
                {
                        printf("》文件写入成功,写入字节数据:%d\n",fnum);
                        printf("》向文件写入第一组数据为:\r\n%x\r\n",*WriteBuffer);
                }
                else
                {
                        printf("!!文件写入失败:(%d)\n",res_sd);
                }   
               
               
                fnum = f_size(&fnew);
        res_sd =         f_lseek(&fnew,fnum);
                        if ( res_sd == FR_OK )
                        {
                res_sd=f_write(&fnew,WriteBuffer,sizeof(WriteBuffer),&fnum);
                if(res_sd==FR_OK)
                {
                        printf("》文件写入成功,写入字节数据:%d\n",fnum);
                        printf("》向文件写入第一组数据为:\r\n%x\r\n",*WriteBuffer);
                }
                else
                {
                        printf("!!文件写入失败:(%d)\n",res_sd);
                }

        }
               
               
         /* 不再读写,关闭文件 */
                f_close(&fnew);
        }

        else
        {       
                LED_RED;
                printf("!!打开/创建文件失败。\r\n");
        }
       

/*------------------- 文件系统测试:读测试 ------------------------------------*/
        printf("****** 即将进行文件读取测试... ******\r\n");
        res_sd = f_open(&fnew, "0:FatFsWRTest.txt", FA_OPEN_EXISTING | FA_READ);          
        if(res_sd == FR_OK)
        {
                LED_GREEN;
                printf("》打开文件成功。\r\n");
               
       
                res_sd = f_read(&fnew, ReadBuffer, f_size(&fnew), &fnum);
    if(res_sd==FR_OK)
    {
                       
      printf("》文件读取成功,读到字节数据:%d\r\n",fnum);
      printf("》读取得的文件数据为:\r\n %x \r\n", *ReadBuffer);       
    }
    else
    {
      printf("!!文件读取失败:(%d)\n",res_sd);
    }               
        }
       
       
       
       
       
       
        else
        {
                LED_RED;
                printf("!!打开文件失败。\r\n");
        }
        /* 不再读写,关闭文件 */
        f_close(&fnew);       
  
        /* 不再使用文件系统,取消挂载文件系统 */
        f_mount(NULL,"0:",1);
  
  /* 操作完成,停机 */
        while(1)
        {
        }
回复

使用道具 举报

发表于 2017-3-3 20:08:18 | 显示全部楼层
f_open的时候不要使用FA_CREATE_ALWAYS ,这个标签每次都新建一个文件的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-4 09:40:37 | 显示全部楼层
flyleaf 发表于 2017-3-3 20:08
f_open的时候不要使用FA_CREATE_ALWAYS ,这个标签每次都新建一个文件的

这个问题我知道拉~!

但是使用f_read的时候,每次虽然返回的文件大小是对的,但是用串口显示的数据只是第一次输入的数据,是串口的问题,还是定义的数组的问题啊。

还是说读的时候,需要再写一个函数。
请大神指条明路!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-15 08:14 , Processed in 0.047153 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表