遍历目录所有文件

 

原创,转载时请注明,谢谢。邮箱:tangzhongp@163.com

博客园地址:http://www.cnblogs.com/embedded-tzp

Csdn博客地址:http://blog.csdn.net/xiayulewa

   

Linux C : readdir

 

 

#include <stdio.h>

#include <dirent.h>

#include <stdlib.h>

 

int main(){

    DIR *dir_p = opendir("/");

    if(dir_p == NULL) perror("opendir"), exit(-1);

    struct dirent *ent;

    while(1){

        ent = readdir(dir_p);

        if(ent == NULL)  break;

        //打印子项类型和子项名

        if( 0 == strcmp(ent->d_name, ".")

         || 0 == strcmp(ent->d_name, "..")){

                continue;

        }   

        printf("%d, %s\n", ent->d_type, ent->d_name);

          //type == 4 是目录,其他是文件

    }

}

 

 

Linux C: scandir

 

 

#include <dirent.h>

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <unistd.h>

 

int dir_printall(const char *pathname)

{

    struct dirent **namelist = NULL;

    int ent_n;

    int i;

 

    ent_n = scandir(pathname, &namelist, NULL, alphasort);

    if (ent_n < 0){

        printf("scandir() fail : %s\n", pathname);

        return -1;

    }

    for(i = 0; i < ent_n; i++){

        if( 0 == strcmp(namelist[i]->d_name, ".")

                || 0 == strcmp(namelist[i]->d_name, "..")){ // skip parent dir and self

            continue;

        }

       

        char path_buf[512] = {0}; // use malloc will be bettor 

        sprintf(path_buf, "%s/%s", pathname, namelist[i]->d_name);

 

        printf("%s\n", path_buf);

 

        if(4 == namelist[i]->d_type){ // 4 means dir

            int retval = dir_printall( path_buf); // recurrence call

            if(-1 == retval){

                fprintf(stderr, "dir_printall() fail: %s\n", path_buf);

                continue;

                //goto out; // not end, for /proc/5236/net can't

            }

        }

    }

    

 

out:

    for(i = 0; i < ent_n; i++){

        if(namelist[i]){

            free(namelist[i]);

            namelist[i] = NULL;

        }

    }

    if(namelist){

        free(namelist);

        namelist = NULL;

    }

    return 0;

 

}

int main(void)

{

    if (-1 == dir_printall("/")){

        perror("dir_printall()");

    }

    return 0;

}

 

 

C++   

   

shell

     

#带完整路径

file=$(find ./)

echo $file

#只有文件名

file=$(ls -R)

echo $file

 

qt

自己做的项目中拷贝出来的一段简化的代码。

bool SearchThread::createDb()

{  

 qDebug() << __LINE__ << __FUNCTION__;

        QFileInfoList fileDriveList = QDir::drives(); // 获取盘符,windows下为c:, d:, e:, linux下为 /

        foreach(QFileInfo fileDrive, fileDriveList){ // 循环处理盘符

                qDebug() << fileDrive.absoluteFilePath();

                    createDb(fileDrive.absoluteFilePath());

        }   

        return true;

}

 

bool SearchThread::createDb(const QString &filePath)

{

        QDir dir = filePath;

 

const QDir::Filters FILTERS =  QDir::AllDirs | QDir::Files | QDir::Drives

                              | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System;

        QFileInfoList fileInfoList = dir.entryInfoList(FILTERS, QDir::DirsFirst | QDir::Name);

        foreach(QFileInfo fileInfo, fileInfoList){

                bool isdir = fileInfo.isDir();   

                if(isdir){

                        if(!fileInfo.isSymLink()){ // 不是链接文件,防止死循环

                            createDb(fileInfo.absoluteFilePath());

                        }

                }

        }

    return true;

}

 

【app】遍历目录所有文件的更多相关文章

  1. Linux下遍历目录及文件,更改权限

    Linux下遍历目录及文件,更改权限 引言: 我在Linux下搭建android时,将eclipse及sdk复制到/usr/下时,总会出现无法读,无法写写样的问题. 解决方案: 有两个方案: 一.将复 ...

  2. php遍历目录下文件,并读取内容

    <?php echo "<h2>遍历目录下文件,并读取内容</h2><br>\n"; function listDir($dir) { i ...

  3. dos下遍历目录和文件的代码(主要利用for命令)

    对指定路径指定文件进行遍历的程序,这里有多个批处理代码,但运行好像有些问题,大家可以根据需要选择 ===== 文件夹结构 ======================================= ...

  4. File类遍历目录及文件

    1. 构造函数 File(String args0)//使用一个表示文件或目录的路径的字符串创建一个File对象 File(URL args0)//使用一个URL对象创建File对象 File(Fil ...

  5. dos下遍历目录和文件的代码(主要利用for命令)(转)

    ===== 文件夹结构 ============================================= D:\test ---A Folder 1 |-----A file 1.txt | ...

  6. php遍历目录与文件夹的多种方法详解

    遍历目录或遍历目录下指定类型的文件,这是每一个童鞋在写程序的时候难免会用到的.PHP本身也提供了很多灰常有用的函数,正确地使用它们,不会有错滴.下面就我个人学习过程中的一些总结,希望对想学PHP的童鞋 ...

  7. Win32下C++遍历目录和文件的源码

    #include<windows.h> #include<iostream> #include<string> using namespace std; //只能处 ...

  8. PHP遍历目录和文件及子目录和文件

    正常直接使用opendir方法,就可以读到所有的目录和文件 文件可以直接记录下来,目录则需要再进一步获取里边的文件信息 也就是,如果当前读出来是目录,则需要再次调用函数本身(递归),直到没有目录 循环 ...

  9. linux c 遍历目录及文件

    #include <dirent.h>void recovery_backend() { DIR * pdir ; struct dirent * pdirent; struct stat ...

随机推荐

  1. Genymotion Unable to create Virtual Device:Connection timeout

    1.进入C:\Users\[UserName]\AppData\Local\Genymobile,打开genymotion.log,找到最后几句话:     九月 2 14:29:45 [Genymo ...

  2. nginx使用小记

    中文wiki社区:http://wiki.codemongers.com/NginxChs 一 . nginx安装 1. 下载nginx : http://sysoev.ru/nginx/downlo ...

  3. im 编辑命令总结

    一. VIM高亮 进入vim后,在普通模式下输入如下命令,开启php代码高亮显示   :syntax enable   :source $VIMRUNTIME/syntax/php.vim   二. ...

  4. WPF-22:WPF绘制五角星改进版(增加半个五角星的绘制)-修改bug

    之前用坐标画多边形的方法,绘制五角星.今天调试时发现当时写的时候有bug,修改一下. 原文: http://blog.csdn.net/yysyangyangyangshan/article/deta ...

  5. word2vec 中的数学原理具体解释(三)背景知识

      word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了非常多人的关注.因为 word2vec 的作者 Tomas M ...

  6. 二路单调自增子序列模型【acdream 1216】

    题目:acdream 1216 Beautiful People 题意:每一个人有两个值,能力值和潜力值,然后要求一个人的这两个值都严格大于第二个人的时候,这两个人才干呆在一块儿,给出很多人的值,求最 ...

  7. JavaDoc的生成规则---ShinePans

    使用方法: javadoc [options] [packagenames] [sourcefiles] [@files] -overview <file>          从 HTML ...

  8. C# 课堂总结1-二进制转换

    一.目的:便于计算机表示,稳定性好,符合逻辑运算,真为1,假为0. 二.各进制表示方法: 2进制:0,1 8进制:0-7 16进制:0-9,A,B,C,D,E,F 二.转换方法: 1.各进制转换为10 ...

  9. lua 安装配置

    LUA用纯C语言编写 1.相关安装配置 Last login: Thu Jul  9 08:42:02 on console nixinshengdeMacBook-Pro:~ nixinsheng$ ...

  10. 闲扯 Javascript 00

    引言 Javascript  的作用在此就不阐述了,相信你已经知道它的用途!那我说点什么呢? 不如就和大家先扯一把,后面的工作 随后后展开吧! 首先声明:我个人对Javascript 认识,我只知道它 ...