zoukankan      html  css  js  c++  java
  • 递归删除一个非空目录及其下所有文件和目录

    我们知道CfileFind未提供直接遍历其子目录的功能,而有时候我们却常常要遍历某一目录下的所有文 件及其子目录。如我们要删除一个目录,而这个目录下又有子目录,因为Windows不允许删除非空的目录,因此我们必须能够遍历一个目录下的所有子目录, 这可以通过简单的递归实现.

      下面让我们从一个简单的例子开始:如何删除某一目录?(假设我们通过DeleteDirectory(LPCTSTR DirName)函数完成这一功能)

      要删除一个目录,我们要完成下面几步:

      1. 删除该目录下的所有文件

      2. 如果该目录中还有子目录我们要递归地调用DeleteDirectory(LPCTSTR DirName)函数,以删除该子目录下的所有文件

      3. 调用RemoveDirectory(LPCTSTR lpPathName)删除该目录
    伪码:
    bool deletedir(xx)
    {
        while(xx目录里还有文件)
        {
            如果是文件
                删;
            如果是目录
                deletedir(目录);
            找下一个文件;
        }
        删除空目录
    }

    Code:
    // DeleteDirFiles.cpp : Defines the entry point for the console application.
    //

    #include "stdafx.h"
    #include <afx.h>//需要设置程序为支持MFC,在Project-Setting, General中选择Using MFC as a Shared Dll类似……………………

    BOOL DeleteDirectory(char *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))//此时应该只是一个空目录了
        {
            MessageBox(0,"删除目录失败!","警告信息",MB_OK);
            return FALSE;
        }
        return TRUE;
    }

    int main(int argc, char* argv[])
    {
        DeleteDirectory("C:\\test");
        return 0;
    }


  • 相关阅读:
    PHP-FPM 重启
    white-space: nowrap
    php-fpm 优化
    & 引用传值
    tp3 save操作小bug误区
    用百度接口验证是否上传了身份证图片信息[非姓名,身份证号匹配]
    nginx 反向代理案例
    IOS把图片缓存到本地的几种方法
    ios沙盒查找图片展示
    iOS模拟器沙盒使用推荐
  • 原文地址:https://www.cnblogs.com/dayouluo/p/117342.html
Copyright © 2011-2022 走看看