`

递归删除目录

 
阅读更多
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <utime.h>
#include <iostream>
using namespace std;

#define TIME_CHN_FMT "%Y-%m-%d %H:%M:%S"

char* timeToString(time_t tmTime, const char *fmt,char *strTime, int len)
{
    struct tm gmTime;
    localtime_r(&tmTime, &gmTime);
    strftime(strTime, (size_t) len, fmt, &gmTime);

    return strTime;
}

int removeDir(const char* dirStr)
{
    struct dirent* subPath = NULL;
    DIR* dir = opendir(dirStr);
    if(dir==NULL)
    {
        cout << "打开目录失败,dir:" << dirStr << endl;
        return -1;
    }
    cout << "删除目录开始,path:" << dirStr << endl;
    while((subPath=readdir(dir))!=NULL)
    {
        if(strcmp(subPath->d_name,".")==0||strcmp(subPath->d_name,"..")==0){
            continue;
        }
        struct stat statBuf;
        char subPathStr[256];
        bzero(subPathStr,sizeof(subPathStr));
        strcpy(subPathStr,dirStr);
        strcat(subPathStr,"/");
        strcat(subPathStr,subPath->d_name);
        lstat(subPathStr,&statBuf);
        if(S_ISDIR(statBuf.st_mode))
        {
            removeDir(subPathStr);
            continue;
        }
        char createTime[32],accessTime[32],modifyTime[32];
        bzero(createTime,sizeof(createTime));
        bzero(accessTime,sizeof(accessTime));
        bzero(modifyTime,sizeof(modifyTime));
        timeToString(statBuf.st_ctime,TIME_CHN_FMT,createTime,sizeof(createTime));
        timeToString(statBuf.st_atime,TIME_CHN_FMT,accessTime,sizeof(accessTime));
        timeToString(statBuf.st_mtime,TIME_CHN_FMT,modifyTime,sizeof(modifyTime));
        cout << "删除文件:" << subPathStr << ",创建时间:" << createTime << ",最后访问时间:"
             << accessTime<< ",最后修改时间:" << modifyTime << endl;

        unlink(subPathStr);
    }
    cout << "删除目录结束,path:" << dirStr << endl;
    rmdir(dirStr);
    return 0;
}

int main()
{
    char dirStr[128] = "/home/code/apue_debug/test";
    removeDir(dirStr);
}

删除目录开始,path:/home/code/apue_debug/test
删除文件:/home/code/apue_debug/test/dirFile,创建时间:2014-08-12 16:02:55,最后访问时间:2014-08-12 16:02:55,最后修改时间:2014-08-12 16:02:55
删除目录开始,path:/home/code/apue_debug/test/subDir
删除文件:/home/code/apue_debug/test/subDir/subDirFile,创建时间:2014-08-12 16:02:59,最后访问时间:2014-08-12 16:02:59,最后修改时间:2014-08-12 16:02:59
删除目录结束,path:/home/code/apue_debug/test/subDir
删除目录结束,path:/home/code/apue_debug/test
分享到:
评论

相关推荐

    JAVA递归删除目录失败

    so easy,写了一个递归删除目录,但结果出乎意料,一个递归目录删除成功,而另外一个却删除失败,刚开始怀疑文件被占用问题,后来被排除了。后来尝试使用各种工具,文件粉碎机都不能解决。最后,通过重命名解决此...

    Qt C++ 递归删除文件目录和文件

    编写了一系列递归删除目录和文件的方法,包括条件判断,删除成功与否返回调试信息等,便于初学者理解学习 //递归删除目录和文件 bool removeDir(const QString& dirPath) { QDir dir(dirPath); //QFileInfoList ...

    递归删除文件或子目录

    在这个场景中,"递归删除文件或子目录"指的是编写一个程序,它能够遍历并删除指定目录下的所有文件和子目录,包括它们的子孙目录,但会跳过那些被标记为只读属性的文件和目录。这个功能在清理或整理文件系统时非常...

    VC++ 递归删除文件夹

    递归删除文件夹 代码简洁易懂

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

    以下是一个使用递归删除目录的实例: ```cpp #include #include #include // 递归删除一个目录 void RecursiveDelete(const std::wstring& strDir) { WIN32_FIND_DATAW findData; HANDLE hFind = ...

    php递归删除目录与文件的方法

    在PHP中,递归删除目录与文件的操作主要涉及以下几个知识点: 1. PHP文件操作函数: - `is_dir()`:判断指定路径是否为目录。 - `is_file()`:判断指定路径是否为文件。 - `opendir()`:打开一个目录句柄。 - `...

    php创建和删除目录函数介绍和递归删除目录函数分享

    在本文中,我们将详细介绍PHP中的文件目录操作相关函数,并且分享如何实现一个递归删除目录的自定义函数。 首先,PHP提供了多个内置函数,用于创建和删除目录。最基础的函数是`mkdir()`,用于创建一个新的目录。其...

    VC++ 使用递推 递归法删除目录的小例子 源码

    以下是一个简单的递归删除目录的步骤概览: 1. **基础情况**:当遇到一个空目录时,可以直接删除。 2. **递归情况**:对于非空目录,遍历目录中的每一个条目(文件或子目录)。 3. **递归调用**:如果是子目录,...

    python递归删除指定目录及其所有内容的方法

    在Python编程中,有时我们需要对文件系统进行操作,比如删除文件或目录。...同时,也可以考虑使用`shutil.rmtree()`,这是Python标准库提供的一个功能,同样可以实现递归删除目录,且自带异常处理。

    递归实现的对多级嵌套目录的删除算法.pdf

    需要注意的是,递归删除目录时应谨慎处理,因为它会永久性地移除数据且无法恢复。在实际应用中,通常会添加安全检查,如确认用户是否具有足够的权限,或者在删除前提供备份选项。 此外,递归删除目录的效率受到系统...

    Java非递归实现删除任意目录的方法

    非递归删除目录的方法主要是使用队列和栈来模拟目录结构的遍历过程。首先,我们需要创建一个队列来存储文件和直接子目录,然后使用 while 循环来遍历队列中的每个元素,如果元素是文件,则直接删除,如果元素是目录...

    递归删除文件目录的方法

    这是一个使用java开发了类,可以递归删除文件目录。

    非递归删除非空目录(源代码)

    然而,要实现非递归删除非空目录,我们需要更复杂的方法。这通常涉及到遍历目录中的所有子项,先删除文件,再删除子目录,最后删除目标目录自身。这个过程可以使用`FindFirstFile`、`FindNextFile`和`FindClose`函数...

    精彩编程与编程技巧-采用递归算法删除带有多级子目录的目录...

    根据提供的代码示例,我们可以进一步了解如何使用VBA(Visual Basic for Applications)编写递归删除目录的程序。 ```vba Option Explicit Private Sub Command1_Click() Dim strPathName As String strPathName ...

    一个递归删除指定目录和文件的例子

    在编程领域,递归是一种强大的工具,特别是在处理文件系统操作如删除目录及其包含的所有文件时。这个例子将探讨如何使用递归实现这个功能,主要关注C++编程语言,因为提供的文件列表暗示这是一个C++项目。 首先,让...

    递归删除指定类型的文件夹,递归删除指定类型的文件

    1. **递归删除指定类型的文件夹**:在编程中,我们可以编写一个函数,该函数接受一个目录路径和一个文件夹类型作为参数。函数会首先检查当前目录是否是目标类型,如果是,则删除该目录;如果不是,函数会遍历该目录...

    python基础之删除文件及删除目录的方法 (1).doc

    使用 `os` 模块和 `os.walk()` 函数可以递归删除目录和文件。例如: ``` import os for root, dirs, files in os.walk('目录路径', topdown=False): for name in files: os.remove(os.path.join(root, name)) ...

Global site tag (gtag.js) - Google Analytics