OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6312|回复: 4

使用FATFS在SD卡内创建一个文件夹,在文件夹内在新建一个文本文件,新建文本文件时候出现失败

[复制链接]

14

主题

76

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1422
金钱
1422
注册时间
2015-12-22
在线时间
325 小时
发表于 2016-6-6 09:55:59 | 显示全部楼层 |阅读模式
1金钱
大家好,使用FATFS在SD卡内创建一个文件夹,在文件夹内在新建一个文本文件,新建文本文件时候出现失败。程序如下:
传入的参数是SD卡根目录创建的文件夹名,程序能够新建文件夹和打开文件夹,到了新建文本文件的时候就失败,还请各位朋友指点下。

u8 Fatfs_Write(char *path)
{
        u8 res;
        DIR dirw;
        FIL *filea;
        char filname[60];
        res=f_mkdir(path);  //在一个盘内创建一个文件夹
        if(res!=FR_OK)  
        {
                LCD_ShowString(30,250,200,16,16,"Creat File Fail");
                return 1;
        }
        LCD_ShowString(30,250,200,16,16,"Creat File OK   ");
        res=f_opendir(&dirw,path);//打开文件夹
        if(res!=FR_OK)  
        {
                LCD_ShowString(30,270,200,16,16,"Open File Fail");
                return 2;
        }
        LCD_ShowString(30,270,200,16,16,"Open File OK    ");
        strcpy(filname,path);
        strcat(filname,"/rwfile.txt");
        res=f_open(filea,path,FA_CREATE_ALWAYS|FA_WRITE|FA_OPEN_ALWAYS); //在创建的文件夹内新建一个.txt文件
        if(res!=FR_OK)  
        {
                LCD_ShowString(30,290,200,16,16,"NEW File Fail");
                return 3;
        }
        LCD_ShowString(30,290,200,16,16,"NEW File OK   ");
        f_write(filea,text,strlen(text),&bw);
        f_close(filea);
        f_closedir(&dirw);
        return 0;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2016-6-6 11:57:21 | 显示全部楼层
创建文件夹之后,不要f_opendir( )打开文件夹,直接f_open( )创建文件,试一下。
回复

使用道具 举报

14

主题

76

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1422
金钱
1422
注册时间
2015-12-22
在线时间
325 小时
 楼主| 发表于 2016-6-6 12:07:02 | 显示全部楼层
adlu 发表于 2016-6-6 11:57
创建文件夹之后,不要f_opendir( )打开文件夹,直接f_open( )创建文件,试一下。

不打开创建的文件夹怎么在里面新建文本文件呢?直接写目录名好像就没有什么意义了吧
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2016-6-6 13:55:29 | 显示全部楼层
loyalboy1111 发表于 2016-6-6 12:07
不打开创建的文件夹怎么在里面新建文本文件呢?直接写目录名好像就没有什么意义了吧

关键可能不是在此。
res=f_open(filea,path,FA_CREATE_ALWAYS|FA_WRITE|FA_OPEN_ALWAYS);
你看一下返回值是什么,代表的是什么错误。

FA_CREATE_ALWAYS,FA_OPEN_ALWAYS这两个同时用是不是有问题?我也不清楚。用其中之一就可以了吧
回复

使用道具 举报

14

主题

76

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1422
金钱
1422
注册时间
2015-12-22
在线时间
325 小时
 楼主| 发表于 2016-6-6 14:32:20 | 显示全部楼层
adlu 发表于 2016-6-6 13:55
关键可能不是在此。
res=f_open(filea,path,FA_CREATE_ALWAYS|FA_WRITE|FA_OPEN_ALWAYS);
你看一下返 ...

问题已经解决,只需要将函数内定义的局部变量filea换成全局变量定义好的file就OK了。只是想不通为什么定义成全局的就可以。通过程序可知:
//为exfuns申请内存
//返回值:0,成功
//1,失败
u8 exfuns_init(void)
{
        u8 i;
        for(i=0;i<_VOLUMES;i++)
        {
                fs=(FATFS*)mymalloc(SRAMIN,sizeof(FATFS));        //为磁盘i工作区申请内存       
                if(!fs)break;
        }
        file=(FIL*)mymalloc(SRAMIN,sizeof(FIL));                //为file申请内存
        ftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL));                //为ftemp申请内存
        fatbuf=(u8*)mymalloc(SRAMIN,512);                                //为fatbuf申请内存
        if(i==_VOLUMES&&file&&ftemp&&fatbuf)return 0;  //申请有一个失败,即失败.
        else return 1;       
}
可能是申请内存这块的问题。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 11:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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