Login dark

title: 删除非空目录的函数
author: Love02xp
date: 2018-06-23 10:52:43
category: [编程代码]
tags: [VC6,编程]
draft: false
cover:
preview:



##### [阅读原文]()

因为VC中没有删除非空目录的函数,所以要用以下方法来做:
<!--more-->



/*

  • 路径串str的最后不要加''
    */

void DeleteDir(CString str)
{
CFileFind finder; //文件查找类
CString strdel,strdir;//strdir:要删除的目录,strdel:要删除的文件
strdir=str+"\.";//删除文件夹,先要清空文件夹,加上路径,注意加"\"
BOOL b_finded=(BOOL)finder.FindFile(strdir);
while(b_finded)
{
b_finded=(BOOL)finder.FindNextFile();
if (finder.IsDots()) continue;//找到的是当前目录或上级目录则跳过
strdel=finder.GetFileName(); //获取找到的文件名
if(finder.IsDirectory()) //如果是文件夹
{
strdel=str + "\" + strdel;//加上路径,注意加"\"
DeleteDir(strdel); //递归删除文件夹
}
else //不是文件夹
{
strdel=str + "\" + strdel;
if(finder.IsReadOnly())//清除只读属性
{

SetFileAttributes(strdel,GetFileAttributes(strdel)&(~FILE_ATTRIBUTE_READONLY));

}
DeleteFile(strdel); //删除文件(API)
}
}
finder.Close();
RemoveDirectory(str); //删除文件夹(API)
}

void DeleteDirectory(CString strDir)
{
if(strDir.IsEmpty())
return;

// 首先删除文件及子文件夹
CFileFind ff;
BOOL bFound = ff.FindFile(strDir+"\*", 0);
while(bFound)
{

bFound   =   ff.FindNextFile(); 
if(ff.GetFileName()=="."||ff.GetFileName()=="..") 
continue; 
//   去掉文件(夹)只读等属性 
SetFileAttributes(ff.GetFilePath(),   FILE_ATTRIBUTE_NORMAL); 
if(ff.IsDirectory()) 
{ 
  //   递归删除子文件夹 
  DeleteDirectory(ff.GetFilePath()); 
  RemoveDirectory(ff.GetFilePath()); 
} 
else 
{ 
  //   删除文件 
  DeleteFile(ff.GetFilePath()); 
} 

}
ff.Close();

// 然后删除该文件夹
RemoveDirectory(strDir);
}


第二方法
BOOL DeleteDirectory(LPCTSTR 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);    
  }    
}    

}
tempFind.Close();
if(!RemoveDirectory(DirName))
{

AfxMessageBox("删除目录失败!",MB_OK);    
return     FALSE;    

}
return TRUE;
}