硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2126|回复: 9
收起左侧

[其它] 用fatfs给sd卡里面新建一个文件夹,后在文件夹里面写一个txt文档

[复制链接]

95

主题

297

回帖

582

积分

金牌会员

123

积分
582
发表于 2022-3-1 18:34:00 | 显示全部楼层 |阅读模式
用fatfs给sd卡里面新建一个文件夹,然后在文件夹里面写一个txt文档,问题:当重新建一个文件夹的时候总是新建不成功,第二次才能新建成功,后面一直都正常,写txt也正常,可能是什么原因呢?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2022-3-2 01:15:41 | 显示全部楼层
这个貌似是驱动有问题,可以先换个SD卡试试。
回复

使用道具 举报

95

主题

297

回帖

582

积分

金牌会员

123

积分
582
 楼主| 发表于 2022-3-2 09:07:07 | 显示全部楼层
eric2013 发表于 2022-3-2 01:15
这个貌似是驱动有问题,可以先换个SD卡试试。

result=opendir(参数);//先打开文件夹目录
if(result==ok)
{
//打开文件夹成功
}else
{


mkdir(参数);//打开文件夹失败,然后创建文件夹
}
closedir();//关闭操作



这个逻辑没啥问题吧?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2022-3-2 09:53:25 | 显示全部楼层
ssssssss 发表于 2022-3-2 09:07
result=opendir(参数);//先打开文件夹目录
if(result==ok)
{

我是这样的,你的感觉也没问题。

        /* 如果SD卡中没有PicSave文件,会进行创建 */
                        result = f_mkdir("0:/PicSave");
                       
                        /* 创建截图 */
                        result = f_open(&file,buf, FA_WRITE|FA_CREATE_ALWAYS);
                       
                        /* 向SD卡绘制BMP图片 */
                        GUI_BMP_Serialize(_WriteByte2File, &file);
                       
                        /* 创建完成后关闭file */
                    result = f_close(&file);
回复

使用道具 举报

95

主题

297

回帖

582

积分

金牌会员

123

积分
582
 楼主| 发表于 2022-3-2 13:01:03 | 显示全部楼层
eric2013 发表于 2022-3-2 09:53
我是这样的,你的感觉也没问题。

        /* 如果SD卡中没有PicSave文件,会进行创建 */

也就是说f_mkdir函数,每次执行,如果文件夹已经存在,就不新建,如果没有才会新建。

那我的逻辑也可以这么写:


1:mkdir(参数);//打开文件夹失败,然后创建文件夹
2:result=opendir(参数);//先打开文件夹目录:
3:各种读写操作
4:closedir();//关闭操作

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2022-3-2 14:53:54 | 显示全部楼层
ssssssss 发表于 2022-3-2 13:01
也就是说f_mkdir函数,每次执行,如果文件夹已经存在,就不新建,如果没有才会新建。

那我的逻辑也可 ...

用我这种方式,创建是否可以。
回复

使用道具 举报

95

主题

297

回帖

582

积分

金牌会员

123

积分
582
 楼主| 发表于 2022-3-2 17:33:27 | 显示全部楼层
eric2013 发表于 2022-3-2 14:53
用我这种方式,创建是否可以。

我写的就是你的逻辑啊。注释没改过来而已

1:mkdir(参数);//直接创建文件夹,如果已经创建了,就不会再创建
2:result=opendir(参数);//打开文件夹目录:
3:各种读写操作
4:closedir();//关闭操作
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2022-3-3 10:18:22 | 显示全部楼层
ssssssss 发表于 2022-3-2 17:33
我写的就是你的逻辑啊。注释没改过来而已

1:mkdir(参数);//直接创建文件夹,如果已经创建了,就不 ...

不一样,我的不是操作的dir函数,我是直接open的。
回复

使用道具 举报

95

主题

297

回帖

582

积分

金牌会员

123

积分
582
 楼主| 发表于 2022-3-3 10:29:23 | 显示全部楼层
本帖最后由 ssssssss 于 2022-3-3 10:30 编辑
eric2013 发表于 2022-3-3 10:18
不一样,我的不是操作的dir函数,我是直接open的。



/* 创建截图 */
                        result = f_open(&file,buf, FA_WRITE|FA_CREATE_ALWAYS);
如果上一次已经写入过一次截图数据,下次过来的时候可能会覆盖呢?这样行不行啊


模式                    描述
FA_READ                指定读访问对象。可以从文件中读取数据。
                        与FA_WRITE结合可以进行读写访问。
FA_WRITE          指定写访问对象。可以向文件中写入数据。
                            与FA_READ结合可以进行读写访问。
FA_OPEN_EXISTING           打开文件。如果文件不存在,则打开失败。(默认)
FA_OPEN_ALWAYS           如果文件存在,则打开;否则,创建一个新文件。
FA_CREATE_NEW           创建一个新文件。如果文件已存在,则创建失败。
FA_CREATE_ALWAYS           创建一个新文件。如果文件已存在,则它将被截断并覆盖。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2022-3-3 15:17:24 | 显示全部楼层
ssssssss 发表于 2022-3-3 10:29
/* 创建截图 */
                        result = f_open(&file,buf, FA_WRITE|FA_CREATE_ALWAYS); ...

我这个就是个截图功能,不过我是每次截图开新名字。
  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: AppTaskMsgPro
  4. *        功能说明: 实现截图功能,将图片以BMP格式保存到SD卡中
  5. *        形    参: p_arg 是在创建该任务时传递的形参
  6. *        返 回 值: 无
  7.         优 先 级: 3
  8. *********************************************************************************************************
  9. */
  10. static void AppTaskMsgPro(void *p_arg)
  11. {
  12.         uint32_t ulStart, ulEnd;
  13.         OS_ERR      err;
  14.         uint8_t                Pic_Name = 0;
  15.         char buf[20];

  16.         (void)p_arg;
  17.                   
  18.         while(1)
  19.         {       
  20.                  /* 等待获取信号量同步消息,接收到后执行串口打印 */
  21.                 OSSemPend((OS_SEM *)&SEM_SYNCH,
  22.                                   (OS_TICK )0,
  23.                                   (OS_OPT  )OS_OPT_PEND_BLOCKING,
  24.                                   (CPU_TS  )0,
  25.                                   (OS_ERR *)&err);
  26.                
  27.                 if(err == OS_ERR_NONE)
  28.                 {       
  29.                         sprintf(buf,"0:/PicSave/%d.bmp",Pic_Name);
  30.                        
  31.                         /* 记录截图前起始时间 */
  32.                         ulStart = OSTimeGet(&err);
  33.                        
  34.                         /* 开启调度锁 */
  35.                         OSSchedLock(&err);
  36.                        
  37.                         /* 如果SD卡中没有PicSave文件,会进行创建 */
  38.                         result = f_mkdir("0:/PicSave");
  39.                        
  40.                         /* 创建截图 */
  41.                         result = f_open(&file,buf, FA_WRITE|FA_CREATE_ALWAYS);
  42.                        
  43.                         /* 向SD卡绘制BMP图片 */
  44.                         GUI_BMP_Serialize(_WriteByte2File, &file);
  45.                        
  46.                         /* 创建完成后关闭file */
  47.                     result = f_close(&file);
  48.                        
  49.                         /* 开启调度锁 */
  50.                         OSSchedUnlock(&err);
  51.                        
  52.                         /* 记录截图后时间并获取截图过程耗时 */
  53.                         ulEnd = OSTimeGet(&err);
  54.                         ulEnd -= ulStart;
  55.                        
  56.                         App_Printf("截图完成,耗时 = %dms\r\n", ulEnd);
  57.                         Pic_Name++;                
  58.                 }                                                                                                                                                                                                    
  59.         }   
  60. }
复制代码



回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 18:18 , Processed in 0.180226 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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