搜索
bottom↓
回复: 30

在FATFS中打开一个文件夹(f_opendir),然后调用f_open,但新建的文件不在这个文件夹里啊???怎

[复制链接]

出0入0汤圆

发表于 2011-10-25 07:57:35 | 显示全部楼层 |阅读模式
如题:我想在一个文件夹里新建文件,但不写路径,怎么实现呢?
如:Current_Date=“2011-10-24”,即这个变量是按日期变化的
    Current_Time=“20-29-15”   ,它是存放当前时间的字符数组
程序如下:
f_mkdir(Current_Date);            //以当前的日期创建一个文件夹
f_opendir(&Folder,Current_Date);  //打开刚建立的文件夹
res1 = f_open(&file, Current_Time, FA_CREATE_NEW | FA_WRITE);//新建以当前时间为名字的文件,并打开

但新建的文件不在这个文件夹里面(如下图),怎么弄就建立在这个文件夹里面了呢???

但我这么写,即写上文件的路径建立文件就在这个文件夹里了。
f_mkdir(“2011-10-24”);            //以当前的日期创建一个文件夹
f_opendir(&Folder,“2011-10-24”);  //打开刚建立的文件夹
res1 = f_open(&file, “2011-10-24/20-29-15.TXT”, FA_CREATE_NEW | FA_WRITE);//新建以当前时间为名字的文件,并打开



(原文件名:fatfs.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-10-25 08:12:34 | 显示全部楼层
持续关注中

出0入0汤圆

发表于 2011-10-25 08:22:06 | 显示全部楼层
它这个打开和你电脑上的打开不是一个意思。你现在已经面向底层了,不是XP操作系统。
f_opendir(&Folder,Current_Date)是打开文件夹属性(不完全是属性,也包含了其下文件列表的打开)的意思,但绝不是电脑上那样的双击后“打开”文件夹。建立文件必须有路径,不给路径你让文件系统怎么办?

出0入0汤圆

发表于 2011-10-25 08:32:43 | 显示全部楼层
FATFS

出0入0汤圆

 楼主| 发表于 2011-10-25 08:52:19 | 显示全部楼层
回复【2楼】flyunlimit 飞行无极限
-----------------------------------------------------------------------

多谢,我再试试

但我的路径是变量啊???

出0入0汤圆

 楼主| 发表于 2011-10-25 09:01:40 | 显示全部楼层
FATFS中有没有想xp下打开文件夹那样的函数呢???

出0入0汤圆

发表于 2011-10-25 09:07:52 | 显示全部楼层
回复【6楼】guxingganyue
-----------------------------------------------------------------------

LZ真强,马上也需要用到,祝LZ顺利调试OK !!!!

出0入0汤圆

 楼主| 发表于 2011-10-25 20:24:25 | 显示全部楼层
还在调试中。。。

出0入0汤圆

发表于 2011-10-26 09:52:35 | 显示全部楼层
我也比较关注这个,以后可以使用!!!1

出0入0汤圆

 楼主| 发表于 2011-10-29 00:18:12 | 显示全部楼层
问题解决了,把你的路径写成字符串的形式即可


(原文件名:11.jpg)


(原文件名:22.jpg)


(原文件名:33.jpg)

出0入0汤圆

发表于 2011-11-11 06:51:48 | 显示全部楼层
楼主能贴出代码看看怎样修改的吗?路径写成字符串的形式是指?烦请赐教

出0入0汤圆

发表于 2012-11-20 15:02:38 | 显示全部楼层
楼主,怎么解决的啊?我出现了相同的问题,希望楼主指教,谢谢!
f_mkdir(Manufacturing_Data);                       
f_opendir(&DirInf,Manufacturing_Data);
f_open(&file,"group.sys",FA_READ|FA_OPEN_ALWAYS);       
文件名存于Manufacturing_Data中,也是可变的。

出0入0汤圆

发表于 2012-11-20 15:17:54 | 显示全部楼层
lytga 发表于 2011-11-11 06:51
楼主能贴出代码看看怎样修改的吗?路径写成字符串的形式是指?烦请赐教

你好,这个问题解决了么?烦请赐教。

出0入0汤圆

发表于 2012-11-20 16:18:51 | 显示全部楼层
airob 发表于 2012-11-20 15:02
楼主,怎么解决的啊?我出现了相同的问题,希望楼主指教,谢谢!
f_mkdir(Manufacturing_Data);                       
f_opend ...

已解决!

出0入0汤圆

 楼主| 发表于 2012-11-20 21:38:45 | 显示全部楼层
airob 发表于 2012-11-20 16:18
已解决!

解决了就好

出0入0汤圆

发表于 2012-11-20 23:30:22 来自手机 | 显示全部楼层
额,原来只是来论坛伸手的,但是难道不懂得出来混是要还的?我知道电脑怎么解决,就是路径直接写为c_data+"/"+c_time就可以了,单片机就不知道有什么快捷高效的方法了?

出0入0汤圆

发表于 2012-11-23 16:05:07 | 显示全部楼层
longwu537 发表于 2012-11-20 23:30
额,原来只是来论坛伸手的,但是难道不懂得出来混是要还的?我知道电脑怎么解决,就是路径直接写为c_data+" ...

不好意思,当时很急所以没有写出解决方法。
char FileName_group[] = "0000/group.sys"
for (i=0; i<4; i++)
{
    FileName_group = Manufacturing_Data;
}
    f_open(&file,FileName_group,FA_OPEN_ALWAYS|FA_READ|FA_WRITE);
就是这样解决的。

出0入0汤圆

发表于 2013-10-28 14:22:41 | 显示全部楼层
MARK 用到了

出0入0汤圆

发表于 2013-10-28 17:19:50 | 显示全部楼层
感觉znfat好像写得也可以,建议楼主参考看看

出0入0汤圆

发表于 2013-10-29 08:20:52 | 显示全部楼层
自己弄了下,用chdir 就不需要用全路径了。
先mkdir
在chdir
最后直接open 文件名

出0入0汤圆

发表于 2013-12-1 18:06:29 | 显示全部楼层
nuncle 发表于 2013-10-29 08:20
自己弄了下,用chdir 就不需要用全路径了。
先mkdir
在chdir

const uint8_t Dir_sub0[] = "1:DR";  
const uint8_t Dir_sub1[] = "1:DR/gps";  
uint8_t Current_text[] = "20131201_171615.dat";               

              //创建文件夹,路径必须一层一层的建立
              enFatResult = f_mkdir(Dir_sub0);
              enFatResult = f_mkdir(Dir_sub1);
              //enFatResult = f_opendir(&dirs,Dir_sub1);//
              enFatResult = f_chdir(Dir_sub1);
              enFatResult = f_open(&stcFp0, Current_text, FA_WRITE | FA_OPEN_ALWAYS | FA_CREATE_ALWAYS); //这里返回值是  FR_NOT_ENABLED
              enFatResult = f_write(&stcFp0,m_au8SdcardTxBuf0,512,&u32WrCount0);
              enFatResult = f_close(&stcFp0);
              if(enFatResult != FR_OK) while(1);

       
不知道何原因?

出0入0汤圆

发表于 2014-2-9 12:02:42 来自手机 | 显示全部楼层
帮我看一下这段有什么问题?void Get_name(uchar i,uchar *strname) { uchar b; uchar total; FILINFO filefs;         if(i==0)         {                 if(!pf_opendir (&dirfs, "bin"))                 {                         while(!pf_readdir(&dirfs,&filefs))                         {                                 if(filefs.fname[0])                                 {                                  if(filefs.fattrib==AM_ARC)                                  {                                  UART_PutString("\r\n");                                  UART_PutString("Get_name-0");                                  UART_PutString("\r\n");                                  UART_PutString(filefs.fname);                                   indextotal++;                                  UART_PutString("\r\n");                                  UART_Put_Inf("total->",indextotal);                                  }                                 }                         }                 }         }          if(i>0)         {                     total=0;          UART_PutString("\r\n");          UART_PutString("Get_name");                 if(!pf_opendir (&dirfs, "bin"))                 {                         while(!pf_readdir(&dirfs,&filefs))                         {                                 if(filefs.fname[0])                                 {                                  if(filefs.fattrib==AM_ARC)                                  {                                           total++;                                  UART_PutString("\r\n");                                  UART_Put_Inf("total->",total);                                  UART_PutString("\r\n");                                  UART_Put_Inf("index->",i);                                  UART_PutString("\r\n");                                          if(total==i)                                          {                                                          UART_PutString("\r\n");                                                 strname[0]='b';                                                 strname[1]='i';                                                 strname[2]='n';                                                 strname[3]='/';                                                 for(b=4;b<20;b++)                                                 strname[b]=filefs.fname[b-4];                                                 UART_PutString(strname);                                         //         goto back;                                           }                                  }                                 }                         }                 }                 } //        back:;         }

出0入0汤圆

发表于 2014-2-9 12:07:16 来自手机 | 显示全部楼层
指针应用我不怎么会。串口显了一次就卡住了。

出0入0汤圆

发表于 2014-7-18 10:56:25 | 显示全部楼层
学习了

出0入0汤圆

发表于 2014-7-22 18:36:02 | 显示全部楼层
编译fatfs的时候启用相对路径,否则创建文件必须用绝对路径作文件名

出0入0汤圆

发表于 2014-12-19 23:53:29 | 显示全部楼层
guxingganyue 发表于 2011-10-29 00:18
问题解决了,把你的路径写成字符串的形式即可

楼主好,我正好也在做这个,非常急切的想请教几个问题。1.FIL类型的变量和所创建的文件之间是一对一的关系还是一对多的关系,在实际使用中是定义成局部的还是全局的,我在调试中发现,
(定义了一个全局的FIL变量)新建一个文件名.txt,该变量就会记录写入该文档的字节数,接着在新建另一个文档时,该变量又会重新记录写入新文档里的字节数,那我要读这两个文档的内容怎么读?
2.创建文件夹也不是很明白?
3.能分享部分代码吗?求赐教!

出0入0汤圆

 楼主| 发表于 2014-12-20 09:43:59 | 显示全部楼层
lyricpoem0726 发表于 2014-12-19 23:53
楼主好,我正好也在做这个,非常急切的想请教几个问题。1.FIL类型的变量和所创建的文件之间是一对一的关 ...

很久之前的代码了,我晚上找找看看能否找到

出0入0汤圆

发表于 2014-12-20 10:54:52 | 显示全部楼层
guxingganyue 发表于 2014-12-20 09:43
很久之前的代码了,我晚上找找看看能否找到

我非常需要啊 ,谢谢。大神

出0入0汤圆

发表于 2015-12-31 10:41:34 | 显示全部楼层
学习了,谢谢

出0入0汤圆

发表于 2016-6-27 15:21:20 | 显示全部楼层
mark一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 05:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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