如何删除一个文件夹下的所有文件?
我已经知道了一个文件夹的路径和名字
现在我想删除该文件夹下所有文件
但是不知道如何知道这些所有文件,我想用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



