你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何用f_unlink删除一个文件夹?

[复制链接]
奏奏奏 提问时间:2017-5-8 19:35 /
最近用STM32F107用SPI方式读写TF卡,
用到了FATFS文件系统
f_mkdir("0:/PHOTO1");                //创建PHOTO文件夹
创建了一个PHOTO1的文件夹
但是现在不知道怎么删除掉这个文件夹

查了一下,用f_unlink函数是没错的
但是试过以下的都不行:
f_unlink("0:/PHOTO1");
f_unlink("/PHOTO1");
f_unlink("PHOTO1");

所以发帖请教。
收藏 1 评论9 发布时间:2017-5-8 19:35

举报

9个回答
eagle0754 回答时间:2017-5-10 08:49:37
对于空文件夹可以这样,但是非空文件夹要遍历删除.

  1. /* 删除文件夹内的所有文件和文件夹 */
  2. FRESULT FS_DeleteIntFile(INT8S* path)
  3. {
  4.     UINT i, j;
  5.     FRESULT res;
  6.     DIR dir;
  7.     FILINFO fno;

  8. #if _USE_LFN
  9.     fno.lfname = 0; /* Set null pointer because LFN is not needed */
  10. #endif
  11.     res = f_opendir(&dir, path);
  12.     if (res == FR_OK)
  13.     {
  14.         for (i = 0; path[i]; i++) ;
  15.         path[i++] = '/';
  16.         for (;;)
  17.         {
  18.             res = f_readdir(&dir, &fno);
  19.             if (res != FR_OK || !fno.fname[0]) break;
  20.             if (fno.fname[0] == '.') continue;
  21.             j = 0;
  22.             do
  23.             path[i+j] = fno.fname[j];
  24.             while (fno.fname[j++]);
  25.             if (fno.fattrib & AM_DIR)
  26.             {
  27.                 res = FS_DeleteIntFile(path);
  28.                 if (res != FR_OK) break;
  29.             }
  30.             res = f_unlink(path);

  31.             if ((res != FR_OK) && (res != FR_DENIED)) break;
  32.         }
  33.         path[--i] = '\0';
  34.     }
  35.    
  36.     return res;
  37. }

  38. /* 删除文件夹或文件 */
  39. FRESULT FS_DeleteFolderOrFile(INT8S* path)
  40. {
  41.     FRESULT res;

  42.     /* 删除此文件夹下的所有文件 */
  43.     res = FS_DeleteIntFile(path);

  44.     if (res == FR_OK)
  45.     {
  46.         /* 删除此文件夹 */
  47.         res = f_unlink(path);
  48.     }
  49.     else if (FR_NO_PATH == res)
  50.     {
  51.         /* 删除此文件 */
  52.         res = f_unlink(path);
  53.     }
  54.    
  55.     return res;
  56. }
复制代码
回答时间:2017-5-9 09:47:17
楼主仿真一下看看提示的什么错误,记得先关闭路径:f_closedir
奏奏奏 回答时间:2017-5-9 10:28:19
安 发表于 2017-5-9 09:47
楼主仿真一下看看提示的什么错误,记得先关闭路径:f_closedir

仿真时返回值是FR_DENIED
这个f_closedir函数并没有在ff.c中
奏奏奏 回答时间:2017-5-9 10:43:49
我查了一下,f_unlink()只能删除空文件夹和未打开的文件
我已经在0:/PHOTO1下创建了文件,
所以用这个f_unlink函数删除不了
有没有什么好办法解决?
回答时间:2017-5-9 11:25:38
我看了一下,没有其他的函数了。只能自己遍历删除了。
奏奏奏 回答时间:2017-5-10 09:31:42
eagle0754 发表于 2017-5-10 08:49
对于空文件夹可以这样,但是非空文件夹要遍历删除.

感谢你的分享,我先试试
奏奏奏 回答时间:2017-5-10 09:52:52
eagle0754 发表于 2017-5-10 08:49
对于空文件夹可以这样,但是非空文件夹要遍历删除.

这里面的函数的输入形参的数据类型有问题:
这两个函数都是 INT8S* path
而 f_unlink 的输入形参数据类型是 const XCHAR *path
导致编译出错
请问是怎么解决的?
eagle0754 回答时间:2017-5-11 08:42:52
奏奏奏 发表于 2017-5-10 09:52
这里面的函数的输入形参的数据类型有问题:
这两个函数都是 INT8S* path
而 f_unlink 的输入形参数据类型 ...

你把函数输入参数类型改一下就行了,不然就强制转化下了.自已多研究下吧
sennn 回答时间:2020-5-11 10:44:47
eagle0754 发表于 2017-5-10 08:49
对于空文件夹可以这样,但是非空文件夹要遍历删除.

我引用了你这段代码,发现执行到 path[i++] = '/';时会出现Haltfault,是什么问题?

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版