CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何删除一个文件夹下的所有文件?

楼主luh(不会游泳的鱼)2003-07-04 08:46:48 在 VC/MFC / 基础类 提问

我已经知道了一个文件夹的路径和名字  
  现在我想删除该文件夹下所有文件  
  但是不知道如何知道这些所有文件,我想用remove一个个删除文件  
  大侠们有什么高招?  
  问题点数:50、回复次数:24Top

1 楼c0der()回复于 2003-07-04 08:55:25 得分 0

都是一个个删除的:  
  while(文件夹不空)  
  {  
  deletefile;  
  }  
  Top

2 楼athena521(小猪)回复于 2003-07-04 08:55:31 得分 0

http://expert.csdn.net/Expert/topic/1976/1976296.xml?temp=.4221155Top

3 楼flyelf(空谷清音)回复于 2003-07-04 09:01:33 得分 0

FindFirstFile,FindNextFile,DeleteFileTop

4 楼baberson(平平狐)回复于 2003-07-04 09:02:09 得分 10

/*  
  函数原型:BOOL   DeleteDirectory(char   *pszDirName);  
  返回值:成功删除时返回TRUE,否则返回FALSE  
  参数pszDirName为要删除的目录名,必须为绝对路径名,如“c:\\temp"。  
  函数定义如下:  
  */  
  BOOL   CUserCustom::DeleteDirectory(char   *pszDirName)  
  {  
  CFileFind   tempFind;  
  char   tempFileFind[200];  
  sprintf(tempFileFind,"%s\\*.*",pszDirName);  
  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",pszDirName,foundFileName);  
  DeleteDirectory(tempDir);  
  }  
  else  
  {  
  char   tempFileName[200];  
  sprintf(tempFileName,"%s\\%s",pszDirName,foundFileName);  
  DeleteFile(tempFileName);  
  }  
  }  
  }  
  tempFind.Close();  
  RemoveDirectory(pszDirName);  
  return   TRUE;  
  }  
  Top

5 楼XiaoYeZiBBS(XiaoYeZi)回复于 2003-07-04 09:07:55 得分 0

有没有函数直接将该文件夹Delete掉?而不需要遍历所有文件?Top

6 楼athena521(小猪)回复于 2003-07-04 09:11:57 得分 0

应该没有吧Top

7 楼guoxiny(狼)回复于 2003-07-04 09:18:04 得分 0

没有,必须遍历所有文件,一个一个删除Top

8 楼USTCTony(Tony)回复于 2003-07-04 09:19:24 得分 0

好像没有直接的api可以用。只有自己遍历文件夹了。Top

9 楼penter(净土)回复于 2003-07-04 09:59:29 得分 0

u,m&s;Top

10 楼theone()回复于 2003-07-04 10:07:53 得分 10

用SHFileOperation(),这个函数很好用,具体看MSDNTop

11 楼theone()回复于 2003-07-04 10:09:42 得分 0

使用SHFileOperation可以删除整个目录,不过有一个需要注意的是,路径参数必须已'\0'结尾,否则会出错,Try   itTop

12 楼my_mtx(水木)回复于 2003-07-04 10:12:40 得分 10

用递归  
   要删除一个目录,我们要完成下面几步:  
   
    1.   删除该目录下的所有文件  
   
    2.   如果该目录中还有子目录我们要递归地调用DeleteDirectory(LPCTSTR   DirName)函数,以删除该子目录下的所有文件  
   
    3.   调用RemoveDirectory(LPCTSTR   lpPathName)删除该目录  
  DeleteDirectory(LPCTSTR   DirName)函数的完整实现如下:  
  BOOL   DeleteDirectory(LPCTSTR   DirName)  
  {  
  CFileFind   tempFind;   file://声明一个CFileFind类变量,以用来搜索  
  char   tempFileFind[200];   file://用于定义搜索格式  
  sprintf(tempFileFind,"%s\\*.*",DirName);  
  file://匹配格式为*.*,即该目录下的所有文件    
   
  BOOL   IsFinded=(BOOL)tempFind.FindFile(tempFileFind);  
  file://查找第一个文件  
  while(IsFinded)  
  {  
  IsFinded=(BOOL)tempFind.FindNextFile();   file://递归搜索其他的文件    
  if(!tempFind.IsDots())   file://如果不是"."目录  
  {  
  char   foundFileName[200];  
  strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));  
  if(tempFind.IsDirectory())   file://如果是目录,则递归地调用  
  {   file://DeleteDirectory  
  char   tempDir[200];  
  sprintf(tempDir,"%s\\%s",DirName,foundFileName);  
  DeleteDirectory(tempDir);  
  }  
  else  
  {   file://如果是文件则直接删除之  
  char   tempFileName[200];  
  sprintf(tempFileName,"%s\\%s",DirName,foundFileName);  
  DeleteFile(tempFileName);  
  }  
  }  
  }  
  tempFind.Close();  
  if(!RemoveDirectory(DirName))   file://删除目录  
  {  
  AfxMessageBox("删除目录失败!",MB_OK);  
  return   FALSE;  
  }  
  return   TRUE;  
  }  
  Top

13 楼my_mtx(水木)回复于 2003-07-04 10:45:16 得分 10

#include   <SHELLAPI.H>  
  void   main()  
  {  
  char   buf[64];  
  SHFILEOPSTRUCT   fo;  
   
  memset(buf,   0,   sizeof(buf));  
  memset(&fo,   0,   sizeof(fo));  
  strcpy(buf,   "D:\\12\\*.*\0");  
  fo.wFunc   =   FO_DELETE;  
  fo.pFrom   =   buf;  
   
  SHFileOperation(&fo);  
   
  RemoveDirectory("D:\\12");  
   
  }Top

14 楼FlyOverSea(雁渡寒潭)回复于 2003-07-04 10:48:51 得分 0

建议使用SHFileOperation 一来方便 二来稳当Top

15 楼flyingjust(just)回复于 2003-07-04 11:24:50 得分 0

SHFileOperation 强大   好用     地球银都知道!Top

16 楼findcsdn(searchcsdn)回复于 2003-07-04 11:43:05 得分 5

WinExec("cmd.exe   /c     rd   /s   /q   d:\test   ",   SW_SHOW);Top

17 楼zgh266(寒风)回复于 2003-07-04 19:53:48 得分 0

upTop

18 楼luolovegui(骆归)回复于 2003-07-05 10:08:41 得分 5

上上楼的朋友没说错。  
   
  我也有一个办法  
   
  system("cmd   /c   del   d:\\test\\*.*");  
   
  或者  
   
  system("command   /c   del   d:\\test\\*.*");  
   
  就可以了。Top

19 楼luh(不会游泳的鱼)回复于 2003-07-07 14:14:17 得分 0

我这里有一个情况大家讨论一下  
  1、remove好象不能删除只读文件  
  2、rmdir删除失败  
  当我删除当前文件下一个子目录  
  我文件是用资源管理器打开  
  因此这个子目录文件夹名称在左面树列表里还能够显示  
  这个时候我用rmdir删除当前文件夹就失败  
  这个是不是微软的bug?Top

20 楼fbmsf(FBM)回复于 2003-07-07 14:40:06 得分 0

肯定用SHFileOperationTop

21 楼athena521(小猪)回复于 2003-07-07 14:46:58 得分 0

remove删除之前可以设置文件的属性Top

22 楼stevecrisewu(月亮骑士)回复于 2003-07-07 15:17:38 得分 0

FindFile,和FindNextFile,RemoveTop

23 楼luh(不会游泳的鱼)回复于 2003-07-08 23:23:43 得分 0

upTop

24 楼ThenLong(完美组合=Delphi/C++)回复于 2003-07-09 08:56:00 得分 0

删除很多文件的目录很快,为什么?  
  就是没有一个个删除,而是直接在fat表删除该目录,其下的所有东西就被认为删掉了。  
  你可以看看Windows自己删除的时候。Top

相关问题

  • 删除文件夹
  • 如何删除一个文件夹及文件夹下所有文件?
  • 请问 asp.net怎样删除文件夹里的所有文件? 而对子文件夹不能删除?
  • 如何删除一个文件夹下的所有文件?
  • 急!!!!如何删除一个文件夹下的所有文件
  • 如何删除一个文件夹下的所有文件?
  • 如何删除某一文件夹下的所有文件?
  • 如何删除一个文件夹内的所有文件?
  • 如何删除文件夹?
  • 怎样删除文件夹

关键词

  • 文件夹
  • 文件
  • 删除
  • pszdirname
  • tempfind
  • foundfilename
  • fo
  • tempfilefind
  • isfinded
  • deletedirectory

得分解答快速导航

  • 帖主:luh
  • baberson
  • theone
  • my_mtx
  • my_mtx
  • findcsdn
  • luolovegui

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo