如何删除一个指定目录下的所有文件(包括子目录)?

xmouse_2001 2003-09-26 09:42:11
如何删除一个指定目录下的所有文件(包括子目录)?
例如:我要删除d:\cd\下的所有文件和子目录
...全文
140 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengweibo 2003-09-26
  • 打赏
  • 举报
回复
晚了N步,不过也贴一下。 :)
void DeleteFile(const char *strDirectory,const char *strFilter,bool bDelteSubDir)
{
WIN32_FIND_DATA FindFileData;
DWORD dwFA;
HANDLE hFind;
BOOL bFind;
char strFileName[1024];

memset(strFileName,0x0,sizeof(strFileName));
strcpy(strFileName,strDirectory);
strcat(strFileName,strFilter);

memset(&FindFileData,0x0,sizeof(FindFileData));
hFind = ::FindFirstFile(strFileName,&FindFileData);
if ( hFind==INVALID_HANDLE_VALUE )
return;

do
{
memset(strFileName,0x0,sizeof(strFileName));
strcpy(strFileName,strDirectory);
strcat(strFileName,FindFileData.cFileName);

dwFA = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
if ( dwFA==FILE_ATTRIBUTE_DIRECTORY )
{
if ( strcmp(FindFileData.cFileName,".")==0
|| strcmp(FindFileData.cFileName,"..")==0 )
{
// do nothing.
}
else
{
if ( bDelteSubDir )
{
strcat(strFileName,"\\");
DeleteFile(strFileName,strFilter,bDelteSubDir);
}
}
}
else
{
::DeleteFile(strFileName);
}

memset(&FindFileData,0x0,sizeof(FindFileData));
bFind = ::FindNextFile(hFind,&FindFileData);
} while ( bFind );
}
wl3c 2003-09-26
  • 打赏
  • 举报
回复
真的?
  • 打赏
  • 举报
回复
转载有理!
转载有分!
  • 打赏
  • 举报
回复
sorry!
是我依照别的程序改装的.
如果我的这段程序可以.
请给
afantict(巴依老爷) ( ) 信誉:71
19 分
给我一分
大家来是相互学习的
分其实并不重要
OK?


  • 打赏
  • 举报
回复
在下的是原创
删除文件夹和文件
#include <direct.h>
void DeleteDirFile(CString sPath)
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);

if (hFind != INVALID_HANDLE_VALUE)
{
while (::FindNextFile(hFind,&fd))
{
//判断是否为目录
if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CString name;
name = fd.cFileName;
//判断是否为.和..
if ((name != ".") && (name != ".."))
{
//如果是真正的目录,进行递归
DeleteDirFile(sPath + fd.cFileName + "\\");
}
}
else
DeleteFile(sPath + fd.cFileName);
}
::FindClose(hFind);
}
RemoveDirectory(sPath);
}
Microsoftadherent 2003-09-26
  • 打赏
  • 举报
回复
afantict(巴依老爷):典型的深度优先遍历,
Pipi0714 2003-09-26
  • 打赏
  • 举报
回复
递归算法,逐个文件夹删除
afantict 2003-09-26
  • 打赏
  • 举报
回复
#include <direct.h>
void DeleteDirFile(CString sPath)
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);

if (hFind != INVALID_HANDLE_VALUE)
{
while (::FindNextFile(hFind,&fd))
{
//判断是否为目录
if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CString name;
name = fd.cFileName;
//判断是否为.和..
if ((name != ".") && (name != ".."))
{
//如果是真正的目录,进行递归
DeleteDirFile(sPath + fd.cFileName + "\\");
}
}
else
DeleteFile(sPath + fd.cFileName);
}
::FindClose(hFind);
}
RemoveDirectory(sPath);
}
spwnihao 2003-09-26
  • 打赏
  • 举报
回复
我也来晚了,还是贴出来吧,我用的mfc的CFindFile类作的,
BOOL DeleteDirectory(char* DirName)
{
CFileFind tempFind;
char tempFileFind[200];
sprintf(tempFileFind,"%s\\*.*",DirName);
BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
while(IsFinded)
{
IsFinded=(BOOL)tempFind.FindNextFile();
if(!tempFind.IsDots())
{
char foundFileName[200];
strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
if(tempFind.IsDirectory())
{
char tempDir[200];
sprintf(tempDir,"%s\\%s",DirName,foundFileName);
DeleteDirectory(tempDir);
}
else
{
char tempFileName[200];
sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
DeleteFile(tempFileName);
}
}
}
return TRUE;
}
wuxfBrave 2003-09-26
  • 打赏
  • 举报
回复
新的思路 用SHFileOperation
afantict 2003-09-26
  • 打赏
  • 举报
回复

大将就应该有大将气度
俺特别佩服星级大侠
你现在多少分啊
  • 打赏
  • 举报
回复
我的意思是支持你转
大家本来就是相互学习



afantict 2003-09-26
  • 打赏
  • 举报
回复
怎么弄得这么认真
我是看 he_zhidan(何志丹:壮志在我心) 昨天还是今天回的一个贴子
当时我也参与哪个问题了
所以刚才马上就找到了
给拷过来了

随便贴贴而已
干吗这么认真
还有版权吗?
代码写得很好

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧