如何用f_unlink删除一个文件夹?
最近用STM32F107用SPI方式读写TF卡,用到了FATFS文件系统
f_mkdir("0:/PHOTO1"); //创建PHOTO文件夹
创建了一个PHOTO1的文件夹
但是现在不知道怎么删除掉这个文件夹
查了一下,用f_unlink函数是没错的
但是试过以下的都不行:
f_unlink("0:/PHOTO1");
f_unlink("/PHOTO1");
f_unlink("PHOTO1");
所以发帖请教。
对于空文件夹可以这样,但是非空文件夹要遍历删除.
/* 删除文件夹内的所有文件和文件夹 */
FRESULT FS_DeleteIntFile(INT8S* path)
{
UINT i, j;
FRESULT res;
DIR dir;
FILINFO fno;
#if _USE_LFN
fno.lfname = 0; /* Set null pointer because LFN is not needed */
#endif
res = f_opendir(&dir, path);
if (res == FR_OK)
{
for (i = 0; path; i++) ;
path = '/';
for (;;)
{
res = f_readdir(&dir, &fno);
if (res != FR_OK || !fno.fname) break;
if (fno.fname == '.') continue;
j = 0;
do
path = fno.fname;
while (fno.fname);
if (fno.fattrib & AM_DIR)
{
res = FS_DeleteIntFile(path);
if (res != FR_OK) break;
}
res = f_unlink(path);
if ((res != FR_OK) && (res != FR_DENIED)) break;
}
path[--i] = '\0';
}
return res;
}
/* 删除文件夹或文件 */
FRESULT FS_DeleteFolderOrFile(INT8S* path)
{
FRESULT res;
/* 删除此文件夹下的所有文件 */
res = FS_DeleteIntFile(path);
if (res == FR_OK)
{
/* 删除此文件夹 */
res = f_unlink(path);
}
else if (FR_NO_PATH == res)
{
/* 删除此文件 */
res = f_unlink(path);
}
return res;
}
楼主仿真一下看看提示的什么错误,记得先关闭路径:f_closedir 安 发表于 2017-5-9 09:47
楼主仿真一下看看提示的什么错误,记得先关闭路径:f_closedir
仿真时返回值是FR_DENIED
这个f_closedir函数并没有在ff.c中 我查了一下,f_unlink()只能删除空文件夹和未打开的文件:'(
我已经在0:/PHOTO1下创建了文件,
所以用这个f_unlink函数删除不了
有没有什么好办法解决? 我看了一下,没有其他的函数了。只能自己遍历删除了。 eagle0754 发表于 2017-5-10 08:49
对于空文件夹可以这样,但是非空文件夹要遍历删除.
感谢你的分享,我先试试:lol eagle0754 发表于 2017-5-10 08:49
对于空文件夹可以这样,但是非空文件夹要遍历删除.
这里面的函数的输入形参的数据类型有问题:
这两个函数都是 INT8S* path
而 f_unlink 的输入形参数据类型是 const XCHAR *path
导致编译出错
请问是怎么解决的? 奏奏奏 发表于 2017-5-10 09:52
这里面的函数的输入形参的数据类型有问题:
这两个函数都是 INT8S* path
而 f_unlink 的输入形参数据类型 ...
你把函数输入参数类型改一下就行了,不然就强制转化下了.自已多研究下吧 eagle0754 发表于 2017-5-10 08:49
对于空文件夹可以这样,但是非空文件夹要遍历删除.
我引用了你这段代码,发现执行到 path = '/';时会出现Haltfault,是什么问题?
页:
[1]