看了好多朋友用那個f_unlink()函數沒法刪除還有內容的文件夾,今天在網上找到一個不錯的函數,所以拿來跟大家分享一下~廢話不多說直接上函數的代碼:
/* 刪除文件夾內所有的文件和文件夾*/
FRESULT FS_DeleteIntFile(TCHAR* 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]; i++) ;
path[i++]='/';
for (;;)
{
res = f_readdir(&dir, &fno);
if (res != FR_OK || !fno.fname[0]) break;
if (fno.fname[0] == '.') continue;
j = 0;
do
path[i+j] = fno.fname[j];
while (fno.fname[j++]);
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(TCHAR* 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;
}
首先把這兩個函數的定義放在ff.c當中,別忘了在ff.h中聲明一下。然后直接調用就行啦
至于怎么用,不用我說了吧~
|