文档章节

遍历目录文件——Windows文件目录和Unix文件目录

Znic
 Znic
发布于 2017/01/11 21:42
字数 262
阅读 25
收藏 0

1.遍历Unix目录

int traverse(const char *current_path)
{
    struct stat st;
    int ret = stat(current_path, &st);
    if (ret != 0)
    {
        return -1;
    }
    
    char path[512] = {0};
    if (S_ISDIR(st.st_mode))
    {
        DIR *dir = opendir(current_path);
        if (NULL == dir)
        {
            return -1;
        }
        
        struct dirent *ptr = NULL;
        while((ptr = readdir(dir)) != NULL)
        {
            if(strstr(ptr->d_name, ".") == ptr->d_name)
            {
                continue;
            }
            
            snprintf(path, sizeof(path), "%s/%s", current_path, ptr->d_name);
            traverse(path);
        }
        
        closedir(dir);
    }
    else
    {
        printf("%s\n", path);
    }
    
    return 0;
}

非递归实现

int traverse(const char *path)
{
    struct dirent *entry = NULL;
    DIR *dir = NULL;
    
    std::stack<std::string> ss;
    ss.push(path);
    while(!ss.empty())
    {
        std::string child = ss.top();
        ss.pop();
        dir = opendir(child.c_str());
        if (NULL == dir)
        {
            printf("@error:%s, %d, %s\n", child.c_str(), ss.size(), strerror(errno));
            return -1;
        }
        
        for(int i = 0; i < 10000 && ((entry = readdir(dir)) != NULL); i++)
        {
            if (strstr(entry->d_name, ".") ==  entry->d_name)
            {
                continue;
            }
            
            if (strstr(entry->d_name, "Application Support"))
            {
                continue;
            }
            
            if (entry->d_type == DT_DIR)
            {
                char str[1024] = {0};
                snprintf(str, sizeof(str), "%s/%s", child.c_str(), entry->d_name);
                ss.push(str);
            }
            else
            {
                printf("file:%s\n", entry->d_name);
            }
        }
        closedir(dir);
        
    }
    return 0;
}

2.遍历Windows目录

int traverse(TCHAR *szDir)
{
    TCHAR path[MAX_PATH] = { 0 };
    WIN32_FIND_DATA ffd = {0};
    HANDLE hFind = INVALID_HANDLE_VALUE;
    
    hFind = FindFirstFile(szDir, &ffd);
    while (FindNextFile(hFind, &ffd) != 0)
    {
        
        sprintf_s(curPath, "%s\\%s", dir, ffd.cFileName);
        
        if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if (strcmp(ffd.cFileName, ".") == 0 || strcmp(ffd.cFileName, "..") == 0)
            {
                continue;
            }

            int ret = traverse(path);
            if (ret != 0 )
            {
                FindClose(hFind);
                return -1;
            }
        }
        else
        {
           //文件
        }
    }
    
    FindClose(hFind);
    
    return 0;
}

 

© 著作权归作者所有

上一篇: 代码优化
Znic
粉丝 1
博文 6
码字总数 1888
作品 0
深圳
程序员
私信 提问
python学习笔记(七)——文件和目录操作

                   目录和文件操作   语言只有和外部连起来操作才会实现更强大的功能,比如操作文件、数据库等,这样数据可以有一块单独存储的地方,而不是存放在内存中...

zhoujie0111
2013/04/10
0
0
Python 学习笔记 (7)—— OS模块

os 模块,正如其名,主要与操作系统打交道的,下面介绍下一些常见的功能 一、文件与目录操作 1、os.getcwd() 获取当前路径 >>> import os >>> os.getcwd() '/tmp/python' 2、os.listdir() 列......

10730
2014/01/21
0
0
php的set_include_path与get_include_path()的用法

setincludepath() 函数可以在php程序中动态改变php的includepath参数,其参数是一个字符串,多个不同的目录可以串联在一起作为一个参数一起提交——不同的目录间使用目录分割符号分开,在类u...

net ljx
2011/09/22
0
0
(转载)其实Unix很简单 — 陈皓

http://blog.csdn.net/haoel/article/details/1533720 很多编程的朋友都在网上问我这样的几个问题,Unix怎么学?Unix怎么这么难?如何才能学好?并且让我给他们一些学好Unix的经验。在绝大多...

张金富
2011/07/19
1K
14
mac os x 命令+10个常用命令行工具

很多朋友对osx下的命令行操作挠头,估计多数是在windows时代开始接触计算机的。有dos基础的应该是看看就明白,而玩过Linux的应该是轻车熟路了。这个贴子希望能给见到命令行就头大的兄弟一些帮...

openthings
2015/04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

怎么选择数据服务器?请记住这五条

我们应当都知道“数据无价”这个词,既然数据那么主要,选择一款安全稳定的数据服务器是很有必要的,那么如何选择一款牢靠的,稳定的数据服务器呢?我们从五个方面下手,协助您体系的了解数据...

linux-tao
13分钟前
0
0
第一讲:编写TCP Socket小程序

根据下面的步骤编写TCP Socket小程序。注意:作者必须是自己的名字。结果如下: 步骤: 1、用VC建立服务器程序 创建一个win32控制台程序 上面的代码如下,编写代码的时候切换到FileView界面,...

一匹狼工作室
15分钟前
1
0
python-protobuf2uml

首先这篇文章是参考的https://github.com/vak/protobuf2uml 本篇文章都是基于python3的 下面首先我们说一下python3的安装 wget https://github.com/protocolbuffers/protobuf/releases/down...

yiduwangkai
16分钟前
0
0
mysql通过source恢复大表小计

最近迁移一个数据库,500多张表大概600多万条数据,通过navicat导出的数据,再通过source命令导入到mysql8.0 之前也做过类似的工作,但是却从来没有这么慢过,一个小时了还没有完成,之前在笔...

休辞醉倒
17分钟前
0
0
Java、Python、C++、PHP、JavaScript这5大编程语言,我究竟该选哪个?

很多朋友在后台给我留言,问:现在这么多编程语言,Python、Java、PHP、C++、JavaScript等,究竟哪种最流行?我想这应该也是你的困扰吧! 其实他们各有优势,但是对于选择困难的程序员而言,...

Java领航员
33分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部