什么函数可以删除一个目录和里面所有的东西?

jamout 2003-08-23 10:29:01
什么函数可以删除一个目录和里面所有的东西?

不用MFC, window api 里有这种函数吗 ?
...全文
34 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
flinming 2003-08-23
  • 打赏
  • 举报
回复
给你一个没有公开的api函数,自己查查msdn SHFILEOPSTRUCT 看看参数变化
void DelDirectory()
{
char *File = "d:\\temp";
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
op.hwnd = HWND_DESKTOP;
op.wFunc = FO_DELETE; //修改这个参数,就可以变成拷贝,移动
op.pFrom = File;
op.fFlags= FOF_ALLOWUNDO; //不要对话筐
op.fFlags=FOF_SILENT|FOF_NOCONFIRMATION ;
SHFileOperation( &op);
}
zhouyong0371 2003-08-23
  • 打赏
  • 举报
回复
我自己写的:
BOOL DeletePath(LPTSTR lpsPath)
{
HANDLE hFile;
WIN32_FIND_DATA WFD;

CHAR Path[MAX_PATH];
LPTSTR lpcsPathParent;

memset(Path,0,MAX_PATH);

lpcsPathParent=Path;
strcpy(lpcsPathParent,lpsPath);
strcat(lpcsPathParent,"\\*");

if((hFile=FindFirstFile(lpcsPathParent,&WFD))==INVALID_HANDLE_VALUE)
return FALSE;

//发送第一个文件信息
if(strcmp(WFD.cFileName,".")!=0 &&
strcmp(WFD.cFileName,"..")!=0)
{
if(WFD.dwFileAttributes&
FILE_ATTRIBUTE_DIRECTORY)
{
CHAR cPath[MAX_PATH];
LPTSTR lpcsPath;

memset(cPath,0,MAX_PATH);

lpcsPath=cPath;

strcpy(lpcsPath,lpsPath);
strcat(lpcsPath,"\\");
strcat(lpcsPath,WFD.cFileName);

DeletePath(lpcsPath);

//只读的文件夹不能被删除,改变属性。
if(WFD.dwFileAttributes&
FILE_ATTRIBUTE_READONLY)
{
SetFileAttributes(lpcsPath,FILE_ATTRIBUTE_NORMAL);
}
::RemoveDirectory(lpcsPath);
}
else
{
CHAR cPath[MAX_PATH];
LPTSTR lpcsPath;

memset(cPath,0,MAX_PATH);

lpcsPath=cPath;

strcpy(lpcsPath,lpsPath);
strcat(lpcsPath,"\\");
strcat(lpcsPath,WFD.cFileName);

//只读的文件不能删除,改变属性
if(WFD.dwFileAttributes&
FILE_ATTRIBUTE_READONLY)
{
SetFileAttributes(lpcsPath,FILE_ATTRIBUTE_NORMAL);
}

DeleteFile(lpcsPath);
}
}

while(hFile)
{
//查完所有信息
if(FindNextFile(hFile,&WFD))
{
if(strcmp(WFD.cFileName,".")==0||
strcmp(WFD.cFileName,"..")==0)
continue;

if(WFD.dwFileAttributes&
FILE_ATTRIBUTE_DIRECTORY)
{
CHAR cPath[MAX_PATH];
LPTSTR lpcsPath;

memset(cPath,0,MAX_PATH);

lpcsPath=cPath;

strcpy(lpcsPath,lpsPath);
strcat(lpcsPath,"\\");
strcat(lpcsPath,WFD.cFileName);

//::MessageBox(NULL,lpcsPath,"path",MB_OK);
DeletePath(lpcsPath);

//只读的文件夹不能删除,改变属性
if(WFD.dwFileAttributes&
FILE_ATTRIBUTE_READONLY)
{
SetFileAttributes(lpcsPath,FILE_ATTRIBUTE_NORMAL);
}

RemoveDirectory(lpcsPath);
}
else
{
CHAR cPath[MAX_PATH];
LPTSTR lpcsPath;

memset(cPath,0,MAX_PATH);

lpcsPath=cPath;

strcpy(lpcsPath,lpsPath);
strcat(lpcsPath,"\\");
strcat(lpcsPath,WFD.cFileName);

//只读的文件不能删除,改变属性
if(WFD.dwFileAttributes&
FILE_ATTRIBUTE_READONLY)
{
SetFileAttributes(lpcsPath,FILE_ATTRIBUTE_NORMAL);
}

DeleteFile(lpcsPath);
}
}
else
{
if(GetLastError()==ERROR_NO_MORE_FILES)
break;
}
}
FindClose(hFile);
return TRUE;
}

lpsPath可以用RemoveDirectory(lpsPath);
就可以了

theone 2003-08-23
  • 打赏
  • 举报
回复
SHFileOperation

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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