c++删除文件夹
轉自:http://blog.csdn.net/sshhbb/archive/2010/12/07/6061029.aspx
?
c++語言本身是不能刪除文件或文件夾的,他們是windows操作系統里的東西,所以得借助其api函數。
其一:使用shell? 接口:
void FileDelete(CString directory)
{
?SHFILEOPSTRUCT??? shFileOp;
?char????? strCurrentPath[MAX_PATH];
?memset(&shFileOp,0,sizeof(shFileOp));
???
?GetCurrentDirectory(MAX_PATH,strCurrentPath);
?strcat_s(strCurrentPath,sizeof(strCurrentPath),directory);
?strCurrentPath[strlen(strCurrentPath)+1] = 0;
?shFileOp.wFunc??? = FO_DELETE;
?shFileOp.pFrom??? = strCurrentPath;
?shFileOp.pTo??? = NULL;
?shFileOp.fFlags??? = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
?SHFileOperation(&shFileOp);
}
使用該函數你得 #include<Shlwapi.h> #pragma comment(lib,"Shlwapi.lib")? 使用他可以將directory和其下的所有文件靜默刪除,聽說在刪除共享文件夾的時候會出錯或提示,沒試過。不過我使用system()做刪除的時候共享文件夾下的刪除是會出錯的。
其二: 使用MFC的CFileFind遞歸遍歷文件并刪除文件和文件夾
?bool DeleteDirectory(char* strDirName)
{
??? CFileFind tempFind;
???
??? char strTempFileFind[MAX_PATH];
??? sprintf(strTempFileFind,"%s//*.*", strDirName);
??? BOOL IsFinded = tempFind.FindFile(strTempFileFind);
??? while (IsFinded)
??? {
??????? IsFinded = tempFind.FindNextFile();
??????? if (!tempFind.IsDots())
??????? {
??????????? char strFoundFileName[MAX_PATH];
??????????? strcpy(strFoundFileName, tempFind.GetFileName().GetBuffer(MAX_PATH));
??????????? if (tempFind.IsDirectory())
??????????? {
??????????????? char strTempDir[MAX_PATH];
??????????????? sprintf(strTempDir,"%s//%s", strDirName, strFoundFileName);
??????????????? DeleteDirectory(strTempDir);
??????????? }
??????????? else
??????????? {
??????????????? char strTempFileName[MAX_PATH];
??????????????? sprintf(strTempFileName,"%s//%s", strDirName, strFoundFileName);
??????????????? DeleteFile(sTempFileName);
??????????? }
??????? }
??? }
??? tempFind.Close();
??? if(!RemoveDirectory(strDirName))
??? {
??????? return FALSE;
??? }
??? return TRUE;
}
?
//
?
轉自:http://zhidao.baidu.com/question/188089955.html
?
?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void main()
{char str[120] ="RMDIR /S "; //加上 /Q 刪除時不要求確認char str2[100]; //文件夾的絕對路徑printf("輸入的文件夾位置為:/n"); scanf("%s",str2);strcat(str,str2);system(str);system("pause");
}
?
方便的辦法,你可以使用dos命令,在C++里可以用system調用 比如system("RMDIR aaa"); 就是刪掉aaa這個目錄 dos命令可以在cmd里打help回車查看http://topic.csdn.net/u/20090126/23/950e840e-8ba9-4be7-94ba-2e48e7cdf862.htmlBOOL DeleteDir(char * path) {WIN32_FIND_DATA finddata;HANDLE hfind;char * pdir;pdir=new char[strlen(path)+5];strcpy(pdir,path);if(path[strlen(path)-1]!='//')strcat(pdir,"//*.*");elsestrcat(pdir,"*.*");hfind=FindFirstFile(pdir,&finddata);if(hfind==INVALID_HANDLE_VALUE)return FALSE;delete []pdir;do{pdir=new char[strlen(path)+strlen(finddata.cFileName)+2];sprintf(pdir,"%s//%s",path,finddata.cFileName);if(strcmp(finddata.cFileName,".")==0||strcmp(finddata.cFileName,"..")==0){RemoveDirectory(pdir);continue;}if((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==0)DeleteFile(pdir);elseDeleteDir(pdir);delete []pdir;}while(FindNextFile(hfind,&finddata));if(RemoveDirectory(path))return TRUE;elsereturn FALSE; } //轉自:http://zhidao.baidu.com/question/96292128.html
c++刪除空文件夾
使用方法: char dir[] = "d://test//"; DeleteEmptyDirectories(dir); / void DeleteEmptyDirectories(const char *dir) {WIN32_FIND_DATA finder;HANDLE hFileFind;char search[MAX_PATH]; strcpy(search, dir); strcat(search, "*.*");hFileFind = FindFirstFile(search, &finder);if (hFileFind != INVALID_HANDLE_VALUE){do{char path[MAX_PATH];strcpy(path, dir);strcat(path, finder.cFileName);if ((finder.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&& strcmp(finder.cFileName, ".")&& strcmp(finder.cFileName, "..")){char subdir[MAX_PATH];strcpy(subdir, path);strcat(subdir, "//");DeleteEmptyDirectories(subdir);// AfxMessageBox(subdir);RemoveDirectory(path);}} while (FindNextFile(hFileFind, &finder) != 0);FindClose(hFileFind);} }另外,用SHFILEOPSTRUCT、SHFileOperation也可以刪除文件夾。
總結
- 上一篇: WIN32 C++ 遍历文件夹
- 下一篇: 边缘检测、Hough变换、轮廓提取、种子