[STM32F4] 为何fatfs系统无法顺利创建文件和文件夹

[复制链接]
3638|7
 楼主| mengheli 发表于 2017-10-18 14:48 | 显示全部楼层 |阅读模式
本帖最后由 mengheli 于 2017-10-18 14:51 编辑
  1. <div class="blockcode"><blockquote> pdir[0]='\0';
  2.                                                 ptxt[0]='\0';
  3.                                                 sprintf((char*)pdir,"0:DATA%02d",dirnum);
  4.                                                 sprintf((char*)ptxt,"0:DATA%02d/%02d.txt",dirnum,txtnum);
  5.                                                                 f_mkdir((const TCHAR*)pdir);
  6.                                                           f_opendir(&dir, (const TCHAR*)pdir);
  7.                                                                 res= f_open(&MyFile, (const TCHAR*)ptxt,FA_OPEN_ALWAYS | FA_WRITE);
  8.                                                                 bytesWritten=MyFile.fsize;
  9.                                                                 res=f_lseek(&MyFile,bytesWritten);
  10.                                                                 res= f_write (&MyFile, adcx, sizeof(adcx), (void *)&bytesWritten);
  11.                                                                 res=f_close(&MyFile);
  12.                                                 dirnum++;
  13.                                                 txtnum++;



如题,运行程序后无法创建文件和文件夹,不知道我哪个地方写的有问题。但是如果不使用字符串变量,直接创建指定的文件夹和文件就没有问题
wanduzi 发表于 2017-10-18 19:52 | 显示全部楼层
是不是,读写也不行啊,看看底层的驱动搞定没。
wanduzi 发表于 2017-10-18 19:53 | 显示全部楼层
就是直接执行读写指令的函数。
zhuomuniao110 发表于 2017-10-18 20:34 | 显示全部楼层
没有移植对吧
 楼主| mengheli 发表于 2017-10-18 21:51 | 显示全部楼层
wanduzi 发表于 2017-10-18 19:52
是不是,读写也不行啊,看看底层的驱动搞定没。

  f_mkdir(“0:DATA”);
                                                          f_opendir(&dir,(“0:DATA”);
                                                           res= f_open(&MyFile, “0:DATA/data.txt”,FA_OPEN_ALWAYS | FA_WRITE);
                                                                bytesWritten=MyFile.fsize;
                                                                res=f_lseek(&MyFile,bytesWritten);
                                                                res= f_write (&MyFile, adcx, sizeof(adcx), (void *)&bytesWritten);
                                                                res=f_close(&MyFile);
这样运行是没有问题的,但是如果我想像帖子开头一样使用字符串变量,想不停创建不同名字的文件,就无法运行

STARM 发表于 2017-10-19 10:40 | 显示全部楼层
  1.   f_mkdir( "0 : DATA" );
  2.   f_opendir( &dir, "0:DATA" );
  3.   res = f_open( &MyFile, "0:DATA/data.txt", FA_OPEN_ALWAYS | FA_WRITE );
  4.   bytesWritten = MyFile.fsize;
  5.   res = f_lseek( &MyFile, bytesWritten );
  6.   res = f_write( &MyFile, adcx, sizeof( adcx ), ( void * ) &bytesWritten );
  7.   res = f_close( &MyFile );

  1.   pdir[ 0 ] = '\0';
  2.   ptxt[ 0 ] = '\0';
  3.   sprintf( ( char * ) pdir, "0:DATA%02d", dirnum );
  4.   sprintf( ( char * ) ptxt, "0:DATA%02d/%02d.txt", dirnum, txtnum );

  5.   f_mkdir( ( const TCHAR * ) pdir );
  6.   f_opendir( &dir, ( const TCHAR * ) pdir );
  7.   res = f_open( &MyFile, ( const TCHAR * ) ptxt, FA_OPEN_ALWAYS | FA_WRITE );
  8.   bytesWritten = MyFile.fsize;
  9.   res = f_lseek( &MyFile, bytesWritten );
  10.   res = f_write( &MyFile, adcx, sizeof( adcx ), ( void * ) &bytesWritten );
  11.   res = f_close( &MyFile );

  12.   dirnum++;
  13.   txtnum++;


似乎是文件名出了问题,可以下个断点,调试一下看看文件名是什么。
 楼主| mengheli 发表于 2017-10-19 14:45 | 显示全部楼层
STARM 发表于 2017-10-19 10:40
似乎是文件名出了问题,可以下个断点,调试一下看看文件名是什么。
...

我觉着是不是pdir和ptxt的使用方法不对,附上相关定义代码,能感觉出来是这部分的问题,但不知道怎么错的
  1. uint16_t *pdir=0;
  2. uint16_t *ptxt=0;
  3. uint16_t dirnum=0;
  4. uint16_t txtnum=0;
  5. uint16_t wnum=0;

 楼主| mengheli 发表于 2017-10-19 14:51 | 显示全部楼层
STARM 发表于 2017-10-19 10:40
似乎是文件名出了问题,可以下个断点,调试一下看看文件名是什么。
...

我设置了断点观察现象,一旦我使用ptxt这种方式出现的现象是U盘没有挂载上
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

31

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部