如何删除目录及目录下所有子文件夹和文件? 最好是不用MFC,而使用标准的WINAPI,因为,这要做个COM,所以可能会不使用MFC,谢谢高手们指导!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是一个mfc的例子 com也可以用mfc嘛!我喜欢mfc:)void DeleteFolder(CString sPath){ CFileFind ff; BOOL bFound; bFound = ff.FindFile(sPath + "\\*.*"); while(bFound) { bFound = ff.FindNextFile(); CString sFilePath = ff.GetFilePath(); if(ff.IsDirectory()) { if(!ff.IsDots()) DeleteFolder(sFilePath); } else { if(ff.IsReadOnly()) { SetFileAttributes(sFilePath, FILE_ATTRIBUTE_NORMAL); } DeleteFile(sFilePath); } } ff.Close(); SetFileAttributes(sPath, FILE_ATTRIBUTE_NORMAL); RemoveDirectory(sPath);} 大致如此。如果要用API,那么用FindFirstFile和FindNextFile组合来替代CFileFind类的操作好了。 int SHFileOperation( LPSHFILEOPSTRUCT lpFileOp);也可以的 bool __stdcall deleteDirectory(const char* pszDir){ WIN32_FIND_DATA fd; char szTempFileFind[MAX_PATH] = { 0 }; bool bIsFinish = false; ZeroMemory(&fd, sizeof(WIN32_FIND_DATA)); sprintf(szTempFileFind, "%s\\*.*", pszDir); HANDLE hFind = FindFirstFile(szTempFileFind, &fd); if (hFind == INVALID_HANDLE_VALUE) return false; while (!bIsFinish) { bIsFinish = (FindNextFile(hFind, &fd)) ? false : true; if ((strcmp(fd.cFileName, ".") != 0) && (strcmp(fd.cFileName, "..") != 0)) { char szFoundFileName[MAX_PATH] = { 0 }; strcpy(szFoundFileName, fd.cFileName); if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { char szTempDir[MAX_PATH] = { 0 }; sprintf(szTempDir, "%s\\%s", pszDir, szFoundFileName); deleteDirectory(szTempDir); } else { char szTempFileName[MAX_PATH] = { 0 }; sprintf(szTempFileName, "%s\\%s", pszDir, szFoundFileName); DeleteFile(szTempFileName); } } } FindClose(hFind); if (!RemoveDirectory(pszDir)) return false; return true; } 求助,被CString和char搞糊涂了,谢谢! 藕断丝连 OLE vc执行的问题 qq界面的一个问题,请教! 请推荐一个画图的控件或者类 如何 得到 usb pipe 有关coblist链表内存释放的问题!高手麻烦来看看!!在线等!! 急救 VC++ #define WINVER 0x0050 谢谢 【求助】一个简单的C++语法问题 请问如何启动一网上邻居机器上的程序? 求删除文件夹的方法 [求助]怎样删除一个文件夹呢,里面不为空!谢谢
void DeleteFolder(CString sPath)
{
CFileFind ff;
BOOL bFound;
bFound = ff.FindFile(sPath + "\\*.*");
while(bFound)
{
bFound = ff.FindNextFile();
CString sFilePath = ff.GetFilePath(); if(ff.IsDirectory())
{
if(!ff.IsDots())
DeleteFolder(sFilePath);
}
else
{
if(ff.IsReadOnly())
{
SetFileAttributes(sFilePath, FILE_ATTRIBUTE_NORMAL);
}
DeleteFile(sFilePath);
}
}
ff.Close();
SetFileAttributes(sPath, FILE_ATTRIBUTE_NORMAL);
RemoveDirectory(sPath);
}
LPSHFILEOPSTRUCT lpFileOp
);
也可以的
{
WIN32_FIND_DATA fd;
char szTempFileFind[MAX_PATH] = { 0 };
bool bIsFinish = false; ZeroMemory(&fd, sizeof(WIN32_FIND_DATA)); sprintf(szTempFileFind, "%s\\*.*", pszDir); HANDLE hFind = FindFirstFile(szTempFileFind, &fd);
if (hFind == INVALID_HANDLE_VALUE)
return false; while (!bIsFinish) {
bIsFinish = (FindNextFile(hFind, &fd)) ? false : true;
if ((strcmp(fd.cFileName, ".") != 0) && (strcmp(fd.cFileName, "..") != 0)) {
char szFoundFileName[MAX_PATH] = { 0 };
strcpy(szFoundFileName, fd.cFileName); if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
char szTempDir[MAX_PATH] = { 0 };
sprintf(szTempDir, "%s\\%s", pszDir, szFoundFileName);
deleteDirectory(szTempDir);
} else {
char szTempFileName[MAX_PATH] = { 0 };
sprintf(szTempFileName, "%s\\%s", pszDir, szFoundFileName);
DeleteFile(szTempFileName);
}
}
}
FindClose(hFind); if (!RemoveDirectory(pszDir))
return false; return true;
}