OpenEdv-开源电子网

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

stract()函数问题,请大神帮助。

[复制链接]

20

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2015-10-16
在线时间
27 小时
发表于 2016-2-26 15:54:16 | 显示全部楼层 |阅读模式
1金钱
我想利用FATFS将SD(“0:”)卡根目录里的文件拷贝到U盘(“2:”)根目录里,下面是我的函数和调试结果,拷贝不过去,感觉是stract()函数问题,请大神帮助。

//拷贝函数
//path1:源文件路径
//path2:目标路径
//mode: 0,不覆盖源文件;1,覆盖源文件
//返回值:执行结果
u8 MY_copy(u8 * path1,u8 * path2,u8 mode)
{
        FRESULT res;          
    char *fn;   /* This function is assuming non-Unicode cfg. */
        u8 *dstpathname=0; //目标文件夹路径+文件名
        u8 *srcpathname=0; //源文件夹路径+文件名
        srcpathname = path1;
        dstpathname = path2;
       
       
#if _USE_LFN
        fileinfo.lfsize = _MAX_LFN * 2 + 1;
        fileinfo.lfname = mymalloc(SRAMIN,fileinfo.lfsize);
#endif                  

    res = f_opendir(&dir,(const TCHAR*)path1); //打开一个源文件目录
    if (res == FR_OK)
        {       
                printf("\r\n");
                while(1)
                {
                res = f_readdir(&dir, &fileinfo);                   //读取目录下的一个文件
                if (res != FR_OK || fileinfo.fname[0] == 0) break;  //错误了/到末尾了,退出
                //if (fileinfo.fname[0] == '.') continue;             //忽略上级目录
#if _USE_LFN
                fn = *fileinfo.lfname ? fileinfo.lfname : fileinfo.fname;
#else                                                          
                fn = fileinfo.fname;
#endif                                                      /* It is a file. */
                        printf("源文件路径:%s/", path1);//打印路径       
                        printf("%s\r\n",  fn);//打印文件名
                        printf("目标文件路径:%s/", path2);//打印路径       
                        printf("%s\r\n",  fn);//打印文件名

                        strcat((char*)srcpathname,(const char*)"/");//源文件路径加斜杠
                        strcat((char*)dstpathname,(const char*)"/"); //目标路径加斜杠
                       
                        strcat((char*)srcpathname,(const char*)fn);//源文件路径
                        strcat((char*)dstpathname,(const char*)fn);//目标路径
                       
                        if(mode==0)mf_copy(srcpathname,dstpathname,0);//拷贝文件不覆盖源文件
                        else if(mode==1)mf_copy(srcpathname,dstpathname,1);//拷贝文件覆盖源文件
                       
                        printf("拷贝后源文件路径:%s\r\n",  srcpathname);//打印文件名
                        printf("拷贝后目标文件路径%s\r\n",  dstpathname);//打印文件名
                }
    }          
        myfree(SRAMIN,fileinfo.lfname);       
        return res;
}



调试的结果是如图所示:
调试结果图片.jpg
感觉像是stract()函数没起作用,并没有将文件路径和文件名拼接在一起,为什么呢?

最佳答案

查看完整内容[请看2#楼]

你没有为srcpathname和dstpathname申请内存吧,你看看是不是这的问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

158

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1525
金钱
1525
注册时间
2015-11-11
在线时间
163 小时
发表于 2016-2-26 15:54:17 | 显示全部楼层
你没有为srcpathname和dstpathname申请内存吧,你看看是不是这的问题
好好学习
回复

使用道具 举报

20

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2015-10-16
在线时间
27 小时
 楼主| 发表于 2016-2-29 11:53:27 | 显示全部楼层
wcyingdream 发表于 2016-2-29 11:39
你没有为srcpathname和dstpathname申请内存吧,你看看是不是这的问题

有可能,我可以试试,3Q
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 06:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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