php函数删除非空目录,删除文件夹(非空目录)及其中所有文件的思路及源代码
在MFC中沒有提供API函數(shù)刪除非空文件夾 A(目錄),所以要想刪除一個(gè)非空文件夾(目錄)必須先刪除里面的文件。
這里需要注意一個(gè)問題,如果非空文件夾(目錄)下還有文件夾(目錄)AA:
1、如果文件夾 AA是空的,那就好辦,直接RemoveDirectory()搞定。
2、如果 AA不是空的呢?......如果你想得比較深一點(diǎn)的話,應(yīng)該會(huì)想到,萬一 AA還有AAA,AAA還有AAAA呢?...有點(diǎn)恐怖,╮(╯3╰)╭
是的,你此刻應(yīng)該想到了遞歸吧,好的,遞歸先暫時(shí)不管,回到正題。
目的還是只有一個(gè),刪除非空文件夾 A!!!
既然如此,那么我們還是只好寫一個(gè)小小的算法刪除里面的數(shù)據(jù)噢,對(duì)的,就是你剛才想到的遞歸!:-)
下面是網(wǎng)上很流行的一個(gè)思路及其代碼:(不是我寫的 :-) )
1 //刪除文件夾目錄(非空)2 boolDeleteDirectory(char*sDirName)3 {4 CFileFind tempFind;
5 charsTempFileFind[MAX_PATH] ;6 7 sprintf(sTempFileFind,"%s\\*.*",sDirName);8 BOOL IsFinded=tempFind.FindFile(sTempFileFind);9 while(IsFinded)10 {11 IsFinded=tempFind.FindNextFile();12 13 if(!tempFind.IsDots())14 {15 charsFoundFileName[MAX_PATH];16 strcpy(sFoundFileName,tempFind.GetFileName().GetBuffer(MAX_PATH));17 18 if(tempFind.IsDirectory())19 {20 charsTempDir[MAX_PATH];21 sprintf(sTempDir,"%s\\%s",sDirName,sFoundFileName);22 DeleteDirectory(sTempDir);//嵌套函數(shù)23 }24 else25 {26 charsTempFileName[MAX_PATH];27 sprintf(sTempFileName,"%s\\%s",sDirName,sFoundFileName);28 DeleteFile(sTempFileName); // DeleteFile(sTempFileName)貌似也行的29 }30 }31 }32 tempFind.Close();33 if(!RemoveDirectory(sDirName))34 {35 returnFALSE;36 }37 returnTRUE;38 }
函數(shù)說明:
1、要?jiǎng)h除的目錄通過參數(shù)char * sDirName傳遞進(jìn)去,可以是相對(duì)路徑的,比如“.\\tmp”;
2、FindFile 函數(shù)是用來查找是否在指定的目錄A 下存在子文件Aa 及文件夾AA,當(dāng)找到返回真;
3、FindNextFile MSDN中的返回值定義是:Nonzero indicates success. Zero indicates failure. To get extended error information, call . If no matching files can be found, the GetLastError function returns ERROR_NO_MORE_FILES.(很多XXNextXX函數(shù)都是先要XXFirstXX一次的,這里是FindFile 算例外麼?)
4、IsDots 函數(shù),熟悉dos 環(huán)境的童鞋都知道一個(gè)目錄下存在“.”和“..”(還沒想起麼?自己去輸入一個(gè)“dir”命令看看就知道了),“.”代表上一層目錄,“..”代表本層目錄。所以呢在查找文件的時(shí)候應(yīng)首先過濾掉這兩個(gè)特殊目錄。如果你逐步調(diào)試這個(gè)函數(shù)的時(shí)候你會(huì)發(fā)現(xiàn)每進(jìn)一個(gè)新的目錄查找都會(huì)首先多執(zhí)行兩次if(!tempFind.IsDots)。
5、RemoveDirectory 函數(shù)只能刪除空文件夾,最后記得調(diào)用一次才能保證完成任務(wù)。
ps:我不記得代碼是在哪里找的了,我在這里感謝無私的作者! :-)
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的php函数删除非空目录,删除文件夹(非空目录)及其中所有文件的思路及源代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 装这样一台电脑主机台式电脑组装主机
- 下一篇: java logger 静态,java1