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++程序设计有所帮助。

相关文章

  • c++ builder TreeView控件节点遍历代码

    c++ builder TreeView控件节点遍历代码

    这篇文章介绍了c++ builder TreeView控件节点遍历代码,有需要的朋友可以参考一下
    2013-09-09
  • VC中SendMessage和PostMessage的区别

    VC中SendMessage和PostMessage的区别

    这篇文章主要介绍了VC中SendMessage和PostMessage的区别,较为全面的分析了SendMessage和PostMessage运行原理及用法上的不同之处,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • C/C++ 避免数组越界的方法

    C/C++ 避免数组越界的方法

    这篇文章主要介绍了C/C++ 避免数组越界的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C语言学习之标识符的使用详解

    C语言学习之标识符的使用详解

    C语言标识符是用于表示变量、函数、常量、类型等程序元素的名称,这篇文章将通过一些简单的示例为大家介绍一下C语言标识符的使用,需要的可以参考一下
    2023-05-05
  • 解析c++中的默认operator=操作的详解

    解析c++中的默认operator=操作的详解

    本篇文章是对c++中的默认operator=操作的应用进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • c++动态内存管理详解(new/delete)

    c++动态内存管理详解(new/delete)

    作为一名编程初学者,通常学习中,发生内存错误是件非常麻烦的事情,下面这篇文章主要给大家介绍了关于c++动态内存管理new/delete的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 详解C++模拟实现priority_queue(仿函数)

    详解C++模拟实现priority_queue(仿函数)

    本文主要介绍了关于C++中优先级队列的模拟实现,以及仿函数的使用,优先级队列是一种容器适配器,其第一个元素总是最大的,仿函数本质是一个类,重载了operator(),可改变比较逻辑,同时,文中还介绍了如何进行类的比较,如日期类或其指针的比较,以及库中sort函数的使用方法
    2024-10-10
  • C++详细讲解IO流原理

    C++详细讲解IO流原理

    当程序与外界进行信息交换时,存在两个对象,一个是程序中的对象,另一个是文件对象。流是信息流动的一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动
    2022-05-05
  • Matlab实现获取文件夹下所有指定后缀的文件

    Matlab实现获取文件夹下所有指定后缀的文件

    这篇文章主要为大家详细介绍了Matlab如何获取文件夹下所有指定后缀的文件(包含子文件夹),文中的示例代码讲解详细,感兴趣的可以尝试一下
    2022-11-11
  • C语言中#pragma pack(1)的用法与注意点

    C语言中#pragma pack(1)的用法与注意点

    #pragma用于指示编译器完成一些特定的动作,下面这篇文章主要给大家介绍了关于C语言中#pragma pack(1)的用法与注意点的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02

最新评论