社区导航

 
查看: 2416|回复: 2

[求助] 如何在FAT文件系统中实现续写一个文件

[复制链接]

340

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2012-1-11 17:35:24 | 显示全部楼层 |阅读模式

最近在用LM3S8962进行文件系统的操作,可以实现对文件读写操作,但发现了一个问题,用如下代码只能实现在SD卡中一行数据:

while(1)

{     

       f_mount(0, &fs);
      res = f_open(&fdst, "dstfile.txt", FA_OPEN_ALWAYS | FA_WRITE);
      int len = strlen(buffer);
      res = f_write(&fdst, buffer,len , &bw);
      f_sync(&fdst);         
      f_close(&fdst);
      f_mount(0, NULL);

}

结果在SD卡中只有一行数据

      f_mount(0, &fs);
      res = f_open(&fdst, "dstfile.txt", FA_OPEN_ALWAYS | FA_WRITE);
      int len = strlen(buffer);

      while(1)

     {

         res = f_write(&fdst, buffer,len , &bw);
          f_sync(&fdst); 

     }              
      f_close(&fdst);
      f_mount(0, NULL);

可以实现多行的写操作。我想实现的是,对一个文件进行续写,比如说一个文件现在里面有1K的数据,现在对这个文件进行续写,但是不能将以前的内容覆盖掉。如何实现,请教下高手。



回复

使用道具 举报

1882

TA的帖子

0

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

荣誉会员勋章

发表于 2012-1-11 21:25:10 | 显示全部楼层

回复 楼主 zheng522 的帖子

可能需要在用  fs_open 打开文件以后,调用 f_lseek,具体可以看一下 f_lseek 函数的用法。


回复

使用道具 举报

340

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2012-1-12 13:38:38 | 显示全部楼层

谢谢楼上的帮忙,我已经实现了想要的功能,谢谢。以下是我实现的代码。主程序:

int main(void)
{
    static FATFS fs;            // Work area (file system object) for logical drive
    static FIL  fdst;      // fsrc,file objects
    static BYTE buffer[4096] = {"123\n"};   // file copy buffer
    static FRESULT res;         // FatFs function common result code
    static WORD bw;         // File R/W countbr,
    int k = 5,j = 5;   
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC |
                   SYSCTL_XTAL_8MHZ | SYSCTL_OSC_MAIN);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    while(k--)
    {
      f_mount(0, &fs);
      res = f_open(&fdst, "dstfile.txt", FA_OPEN_ALWAYS | FA_WRITE);
      res = f_lseek(&fdst, fdst.fsize);
      int len = strlen(buffer);
      while(5)
      {
        res = f_write(&fdst, buffer,len , &bw);
        f_sync(&fdst);
      }
              
      f_close(&fdst);
      f_mount(0, NULL);
    }
    while(1);
}

[ 本帖最后由 zheng522 于 2012-1-12 13:40 编辑 ]


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-12-19 17:26 , Processed in 0.116761 second(s), 15 queries , Gzip On, MemCache On.

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