C++递归删除一个目录实例

 更新时间:2014年10月14日 09:50:52   投稿:shichen2014  
这篇文章主要介绍了C++递归删除一个目录的实现方法,涉及到目录的操作及递归算法的应用,需要的朋友可以参考下

本文实例讲述了C++递归删除一个目录的实现方法。分享给大家供大家参考。具体方法如下:

CFindFile的使用框架如下:

复制代码 代码如下:
void Recurse(LPCTSTR pstr) 

   CFileFind finder; 
 
   // build a string with wildcards 
   CString strWildcard(pstr); 
   strWildcard += _T("\\*.*"); 
 
   // start working for files 
   BOOL bWorking = finder.FindFile(strWildcard); 
 
   while (bWorking) 
   { 
      bWorking = finder.FindNextFile(); 
 
      // skip . and .. files; otherwise, we'd 
      // recur infinitely! 
 
      if (finder.IsDots()) 
         continue; 
 
      // if it's a directory, recursively search it 
 
      if (finder.IsDirectory()) 
      { 
         CString str = finder.GetFilePath(); 
         TRACE(_T("%s\n"), (LPCTSTR)str); 
         Recurse(str); 
      } 
   } 
 
   finder.Close(); 
}

递归删除代码如下:

复制代码 代码如下:
//循环删除一个目录 
void RecursiveDelete(CString strDir) 

    CFileFind ff; 
    CString strPath; 
    strPath = strDir; 
    if (strPath.Right(1) != '\\') 
    { 
        strPath += '\\'; 
    } 
    strPath += "*.*"; 
 
    BOOL bWorking = ff.FindFile(strPath); 
    while (bWorking) 
    { 
        bWorking = ff.FindNextFile(); 
 
        // skip . and .. files; otherwise, we'd 
        // recur infinitely! 
        if (ff.IsDots()) 
            continue; 
 
        // if it's a directory, recursively search it 
 
        if (ff.IsDirectory()) 
        { 
            //递归目录 
            CString str = ff.GetFilePath(); 
            TRACE(_T("%s\n"), (LPCTSTR)str); 
            RecursiveDelete(str); 
            //删除目录 
            ::SetFileAttributesA(str, FILE_ATTRIBUTE_NORMAL); 
            ::RemoveDirectory(str); 
        } 
        else 
        { 
            //删除文件 
            CString str = ff.GetFilePath(); 
            TRACE(_T("%s\n"), (LPCTSTR)str); 
            ::SetFileAttributes(str, FILE_ATTRIBUTE_NORMAL); 
            ::DeleteFile(str); 
        } 
    } 
 
    ff.Close(); 
 

int main(int argc, char *argv[]) 

    RecursiveDelete("C:\\20_128\\"); 
    return 0; 
}

希望本文所述对大家的C++程序设计有所帮助。

相关文章

  • VSCode如何使用最新的C++20(推荐)

    VSCode如何使用最新的C++20(推荐)

    这篇文章主要介绍了VSCode使用最新的C++20的相关知识,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 详解计数排序算法及C语言程序中的实现

    详解计数排序算法及C语言程序中的实现

    技术排序算法与我们普通接触的冒泡排序和快速排序等基于元素比较的算法不同,在编程中通过C语言的数组能够清除地表达出来,这里我们就来详解计数排序算法及C语言程序中的实现
    2016-07-07
  • C语言实现学生选课系统

    C语言实现学生选课系统

    这篇文章主要为大家详细介绍了C语言实现学生选课系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • VScode编译C++ 头文件显示not found的问题

    VScode编译C++ 头文件显示not found的问题

    这篇文章主要介绍了VScode编译C++ 头文件显示not found的问题,本文给大家分享问题解决方法,通过截图的形式给大家介绍的非常详细,需要的朋友可以参考下
    2020-03-03
  • c++ lambda捕获this 导致多线程下类释放后还在使用的错误问题

    c++ lambda捕获this 导致多线程下类释放后还在使用的错误问题

    Lambda表达式是现代C++的一个语法糖,挺好用的。但是如果使用不当,会导致内存泄露或潜在的崩溃问题,这里总结下c++ lambda捕获this 导致多线程下类释放后还在使用的错误问题,感兴趣的朋友一起看看吧
    2023-02-02
  • C++设计模式之适配器模式(Adapter)

    C++设计模式之适配器模式(Adapter)

    这篇文章主要为大家详细介绍了C++设计模式之适配器模式Adapter,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • C语言实现销售管理系统设计

    C语言实现销售管理系统设计

    这篇文章主要为大家详细介绍了C语言实现销售管理系统设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C语言深入浅出讲解直接插入排序算法的实现

    C语言深入浅出讲解直接插入排序算法的实现

    插入排序也是最简单的一类排序方法,我今天介绍的也是插入排序里最直观且浅显易懂的直接插入排序。对这个很简单的排序,记得当时也是花了近两个晚上才搞懂它的原理的,接下来就来介绍一下
    2022-05-05
  • C++实现LeetCode(205.同构字符串)

    C++实现LeetCode(205.同构字符串)

    这篇文章主要介绍了C++实现LeetCode(205.同构字符串),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++ 字符串string和整数int的互相转化操作

    C++ 字符串string和整数int的互相转化操作

    这篇文章主要介绍了C++ 字符串string和整数int的互相转化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论