我在STM32中移植了fatfs文件系统,实现在SD卡对文件的读写。在普通读写中都没有问题,但是一旦我关闭文件系统,再次打开读写,之前写的数据就被覆盖。比如举个例子:
      u8 tx_buff[]="stm32f107学习!!!"  //发送缓冲1
      u8 tx_buff1[]="文件系统学习!!!!"//发送缓冲2
     FATFA fs;
     FIL  fsrc;
     FRESULT res;//读写状态值
   //初始化代码 都正常 能读到卡容量
      下面开始读写:
      f_mount(0,&fs);//注册文件系统
      res=f_open(&fsrc,"123.txt",FA_OPEN_ALWAYS|FA_WRITE);//如果存在则打开,不存在则创建
       if(res)
         {
          printf("\n\r打开文件错误:\n\r");
          f_close(&fsrc);
          }
    /////////现在写入数据
      res=f_write(&fsrc,tx_buff,BufferSize,&br);  //BufferSize为发送缓冲字节数 
     if(res||br==0)
          {
     printf("\n\r文件写入错误:\n\r");
     f_close(&fsrc);
    }
    f_close(&fsrc);//关闭
//////////////////////////////////////读出数据
    res=f_open(&fsrc,"123.txt",FA_OPEN_ALWAYS|FA_READ);//以读的方式打开
   res=f_read(&fsrc,fil_buffer,BufferSize,&bw); //读取数据
   if(res||bw==0)
          {
          printf("\n\r文件读取错误:\n\r");
       f_close(&fsrc);
        }      /////////////////到目前 读出的数据 正常为stm32f107学习!!!
f_close(&fsrc);//关闭
   res=f_open(&fsrc,"123.txt",FA_OPEN_ALWAYS|FA_WRITE|FA_READ);//   现在以读写的方式打开
   res=f_write(&fsrc,tx_buff1,BufferSize,&br);  //写入发送缓冲1中的数据    
   res=f_read(&fsrc,fil_buffer,BufferSize*2,&bw); //读取数据
   这个时候我以为读出的数据应该是stm32f107学习!!!文件系统学习!!!!
   但是读出来的只有文件系统学习!!!!也就是先前写入的tx_buff中的数据被tx_buff1中的数据覆盖了。
   查看f_open函数发现fp->fptr = 0;fp->dsect = 0;调用后每次打开文件会将指针清零,所以每次都从头写。
   如果追加文件则需要移动文件指针,f_lseek函数则派上用处了。此函数用于文件指针的移动,共有两个参数,第一个参数为文件对象,第二个参数为移动的字节数。在这里则F_LSEEK(&fsrc,fsrc.fsize)指向文件结尾,即可追加文件。注意第二个参数是相对于文件的开始,如F_LSEEK(&fsrc,3000),表示移动到文件开头3000个字节处。灵活使用可以方便的操作文件。

f_lseek的更多相关文章

  1. fatfs文件系统f_lseek追加文件

    http://home.eeworld.com.cn/my/space-uid-430378-blogid-74720.html 这个时候我以为读出的数据应该是stm32f107学习!!!文件系统学习 ...

  2. ebox学习之SD & fat 配置

    fatfs可配置项很多,相关的配置均在ffconfig.h文件中 /*----------------------------------------------------------------- ...

  3. SD卡fat文件系统移植

    经过充分的研究,发现fatfs文件系统移植的比较简单!因为代码都已经被别人做好了!我们只需把io层稍稍做个处理就ok了: 至于sd卡的驱动请看我这篇博客:http://blog.csdn.net/ie ...

  4. uCGUI字符串显示过程分析和uCGUI字库的组建

    为什么要分析字符串的显示过程? 学习uCGUI主要是学习如何使用的,为何要深究到源码的层次呢? 就分析字符串显示过程的原因来说,是因为移植汉字字库的需要.uCGUI并么有合适的汉字字库,而且完整的汉字 ...

  5. 8位灰度图在LCD上显示

    一.概述 1.灰度 灰度使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像.每个灰度对象都具有从 0%(白色)到灰度条100%(黑色)的亮度值. 使用黑白或灰度扫描仪生成的图像通常以灰 ...

  6. FatFsVersion0.01源码分析

    目录 一.API的函数功能简述 二.FATFS主要数据结构 1.FAT32文件系统的结构 2.FATFS主要数据结构 ①   FATFS ②   DIR ③  FIL ④  FILINFO ⑤  wi ...

  7. S3C2416裸机开发系列19_Fatfs播放录像wav音频文件

    S3C2416裸机开发系列19 Fatfs播放录像wav音频文件 国际象棋男孩    1048272975 多媒体资源,一般都是以文件的形式存储在固化存储器中.Fatfs所支持的fat32为windo ...

  8. STM32单片机图片解码

    图片解码首先是最简单的bmp图片解码,关于bmp的结构可自行查阅,代码如下 #ifndef __BMPDECODE_H_ #define __BMPDECODE_H_ #include "f ...

  9. FATFS外置UNICODE GBK双向转换码表(转)

    源:FATFS外置UNICODE GBK双向转换码表 将UtoG,GtoU双向码表放到存储卡里面实现长文件名,因为FATFS长文件名需要unicode支持, 首先将UtoG.sys,GtoU.sys两 ...

随机推荐

  1. Linux操作系统服务器学习笔记一

    初识Linux: Linux 是什么? Linux是一套免费使用和自由传播的类Unix操作系统,是一个多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议 ...

  2. Activiti工作流学习笔记一

    Activiti工作流 一:Activiti第一天 1:工作流的概念 说明: 假设:这两张图就是华谊兄弟的请假流程图 图的组成部分: 人物:范冰冰冯小刚王中军 事件(动作):请假.批准.不批准 工作流 ...

  3. JavaWeb之过滤器

    过滤器 什么是过滤器 1示意图: 过滤器的作用: 1.过滤器的作用好比一个保安.是servlet规范中的技术 2.用户在访问应用的资源之前或者之后,可以对请求做出一定的处理 编写过滤器步骤: 1.编写 ...

  4. MySQL之多表查询(笛卡尔积查询、内连接、外连接(左外连接,右外连接)、union、union all )

    多表查询 测试数据 create table emp (id int,name char(10),sex char,dept_id int); insert emp values(1,"大黄 ...

  5. c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)

    运算符重载规则: 只有已经存在的运算符才能被重载,不能自己制造一个c++中没有的运算符进行重载 重载可以在类或枚举类型内进行,也可以是全局函数,但int.float这种已有的类型内是不被允许的 不能二 ...

  6. DBCP 数据源获取连接

    Main package p1; import com.JdbcUtils; import org.apache.commons.dbcp.BasicDataSource; import org.ap ...

  7. Android studio For Mac 安装

    简介: Google在2013的I/O开发者大会上正式对外宣布Android Studio将作为Android开发的主要IDE,它是基于IntelliJ IDEA打造的一款专门开发Android的神器 ...

  8. Using SmartAssembly with MSBuild

    SmartAssembly 6 SmartAssembly 6 documentation Building your assembly Using SmartAssembly with MSBuil ...

  9. 如何创建Github账号及将本地项目上传至GitHub?

    如何将本地项目上传至GitHub 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路直 ...

  10. python中时间戳的探索

    声明 本文章只针对python3.6及以上版本. 问题提出 首先,我们先import一些必要模块: In [1]: from datetime import datetime, timezone, t ...