文档章节

路径下文件遍历

fans1991
 fans1991
发布于 2013/04/10 16:03
字数 386
阅读 664
收藏 7

自己总结了磁盘路径下的文件遍历供大家分享,遍历有深度和广度之分,而,对于路径较长的遍历,无疑广度是最佳选择,深度遍历的递归性消耗大量的资源占用。而广度则为优选。

深度递归遍历为在指定路径下,加上\*进行遍历,遇到文件夹后,则进入文件夹内进行新的遍历,直到文件夹下全是文件,各种递归,完成。

广度遍历则是在遍历指定路径下文件后,进行遍历遇到文件夹进行压栈,然后继续循环在本文件夹下完成后,再从栈中取出文件夹进行层层遍历,最后,完成。

主要的函数,数据结构:WIN32_FIND_DATA FindFirstFile(),  FindNextFile()

递归遍历:

void MyFindFile(const char *pFileName, char* pext = ".*")

{

char szFile[MAX_PATH*100]; 

char szTmp[MAX_PATH]; 

char szPath[MAX_PATH*100]; 

WIN32_FIND_DATA find_data;

strcpy(szPath,pFileName);

strcpy(szFile,szPath);

strcat(szFile,"\\*");

strcat(szFile, pext);

//C:\Documents and Settings\Administrator\◊¿√Ê\machfe\*.txt

HANDLE  hHandle = FindFirstFile(szFile,  &find_data);

if(hHandle!= NULL )

{

do{

if(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )

{

if(find_data.cFileName[0] != '.')

{

strcpy(szTmp,szPath);

strcat(szTmp,"\\");

strcat(szTmp, find_data.cFileName);  

//Sleep(100);

MyFindFile(szTmp);

}


}

else

{  

printf("%s//%s\n", szPath, find_data.cFileName);

//Sleep(100);

}

}while(FindNextFile(hHandle,&find_data) );

FindClose(hHandle);

}

}

广度遍历:

  1. void BreathFindFile(const char *pFileName, char* pext = ".*")
    
    {
    
    char szFile[MAX_PATH]; 
    
    char szTmp[MAX_PATH]; 
    
    char szPath[MAX_PATH]; //µ±«∞…®√Ë∏˘¬∑æ∂
    
    
    CStringList strStact;
    
    
    WIN32_FIND_DATA find_data;
    
    strcpy(szPath,pFileName);
    
    
    
    do{
    
    strcpy(szFile,szPath);
    
    strcat(szFile,"\\*");
    
    strcat(szFile, pext);
    
    
    HANDLE  hHandle = FindFirstFile(szFile,  &find_data);
    
    if(hHandle!= NULL )
    
    {
    
    do{
    
    
    if(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
    
    {
    
    if(find_data.cFileName[0] != '.')
    
    {
    
    strcpy(szTmp,szPath);
    
    strcat(szTmp,"\\");
    
    strcat(szTmp, find_data.cFileName);   
    
    
    strStact.AddTail(szTmp);
    
    }
    
    
    }
    
    else
    
    {  
    
    printf("%s//%s\n", szPath, find_data.cFileName);
    
    
    }
    
    
    
    }while(FindNextFile(hHandle,&find_data) );
    
    
    FindClose(hHandle);
    
    }
    
    
    if( strStact.IsEmpty()  )
    
    { 
    
    break; 
    
    }
    
    else
    
    {
    
     CString strTmp = strStact.GetTail();
    
    strStact.RemoveTail();
    
    
    strcpy(szPath, strTmp.GetBuffer(0));
    
    strTmp.ReleaseBuffer();
    
    }
    
    
    }while (TRUE);
    
    
    
    }

© 著作权归作者所有

上一篇: 排序的整理
下一篇: cocoaPods
fans1991
粉丝 2
博文 5
码字总数 1002
作品 0
厦门
程序员
私信 提问
Python之os.walk和os.path.walk

一、os.walk() 函数声明:os.walk(top,topdown=True,onerror=None) (1)参数top表示需要遍历的顶级目录的路径。 (2)参数topdown的默认值是“True”表示首先返回顶级目录下的文件,然后再遍历子...

duhaizhang
2012/07/20
4.4K
0
Node中的两种遍历方式-深度优先和广度优先(附Node删除文件例子进行详解)

树的基本概念 树(Tree)是 个结点的有限集, 为 时,称为空树,在任意一棵非空树中有且仅有一个特定的被称为根(Root)的结点,当 大于 时,其余结点可分为 个互不相交的有限集 、、、,其中...

2018/09/14
0
0
写个批处理脚本帮忙干活---遍历&字符串处理

这次打算写几篇关于脚本方面的博客,主要是记录一下 Gradle 脚本和批处理脚本的一些写法,方便后续查阅。 前言 平常开发过程中,一些较为重复的手工性工作,如果能让脚本来帮忙处理,自然是最...

请叫我dasu
2018/05/23
0
0
用commons-net包写Ftp客户端下载(二)

上次写完了工具类,那么然后就是另一个工具类了。 1.也就是对ftp上文件的遍历。 这里我发现了一个问题,下载文件的时候,每次都得重新连接,也就是一次连接只能下载一个文件。 虽然到最后我也...

猴子
2011/10/20
882
0
python os模块常用方法

import os os.name() #返回系统标志Windows:nt;Linux:posix os.listdir() #获取路径下的文件或目录名称列表 os.remove() #删除文件 os.removedirs() ###递归式删除os.rmdir() #删除目录 shut...

雪地花露
2016/08/29
14
0

没有更多内容

加载失败,请刷新页面

加载更多

无回路有向图的拓扑排序

因公司业务需要,在表单中每个字段都会配置自动计算,但自动计算公式中会引用到其他字段中的值。所以希望可以根据计算公式,优先计算引用的公式。所以最终使用了无回路有向图的扩扑排序来实现...

兜兜毛毛
40分钟前
3
0
如何抢占云栖大会C位?史上最强强强攻略来了

点击观看视频: APSARA云栖大会开发者情怀 原文链接 本文为云栖社区原创内容,未经允许不得转载。

阿里云官方博客
54分钟前
5
0
Kubernetes 从懵圈到熟练:集群服务的三个要点和一种实现

作者 | 声东 阿里云售后技术专家<br /> 文章来源:Docker,点击查看原文。 <br />以我的经验来讲,理解 Kubernetes 集群服务的概念,是比较不容易的一件事情。尤其是当我们基于似是而非的理解...

阿里巴巴云原生
57分钟前
7
0
PHP7.3的新特性

2018年12月6日,PHP7.3正式版发布,在PHP7.2基础上进行了大量错误修复和安全优化,性能提升10%! 从目前的更新说明来看,PHP 7.3 并不是一个主打新特性的版本,包含更多的是 bug 修复。PHP 7...

迅睿CMS-PHP开源CMS程序
今天
7
0
Tomcat 应用中并行流带来的类加载问题

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/f-X3n9cvDyU5f5NYH6mhxQ 作者:肖铭轩、王道环 随着 Java8 的不断流行,越来越多的开发人员使用并行流(parallel)...

vivo互联网技术
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部