代码改变世界

[代码分享] wxWidgets 非递归方式遍历文件

  wid  阅读(1677)  评论(0编辑  收藏  举报

wxWidgets 非递归方式遍历文件

 



在 wxDir 类中, wxWidgets已经给我们提供了 wxDir::GetAllFiles 函数 和 wxDir::Traverse 来深度遍历某个文件夹下的所有文件, 这里提供的是一种通过 wxDir::GetFirstwxDir::GetNext 方法实现的非递归遍历方案, 其思路如下:

    1>. 建立一个空的目录路径队列;
    2>. 将待遍历的根目录路径添加到目录队列中;
    3>. 取出队列前端的路径进行遍历, 若遇到的是目录则将其添加到目录队列中, 否则输出;
    4>. 当队列前端的目录遍历完成后将其从队列中删除;
    5>. 重复 3 - 4 步骤的操作, 直至目录队列为空。
    
    
用 C 语言代码描述:

复制代码
 1 #include <stdio.h>
 2 #include "wx/filefn.h"
 3 #include "wx/dir.h"
 4 
 5 
 6 int GetAllFilePath( wxString rootPath )
 7 {
 8     wxArrayString dirItems;                //目录队列
 9     dirItems.Add( rootPath );            //将待遍历的目录路径添加到目录队列中
10 
11     wxString filename;    bool cont;    wxString tempPath;
12     while( dirItems.GetCount() )        //当目录队列不为空时执行
13     {
14         wxDir dir( dirItems[0] );        //打开队列前端目录路径
15         if( !dir.IsOpened() )
16             return -1;
17         
18         cont = dir.GetFirst( &filename );                        //获取首个文件
19         while ( cont )
20         {
21             tempPath = dirItems[0] + "\\" + filename;            //合成 filename 的完整路径
22             if( dir.Exists( tempPath ) )            //判断 tempPath 是否为目录
23                 dirItems.Add( tempPath );            //为目录时则添加到目录队列
24             else
25                 printf("%s\n", tempPath );            //否则输出该文件路径
26             
27             cont = dir.GetNext(&filename);            //获取下一个文件
28         }
29         dirItems.RemoveAt(0);                //当前目录遍历完成后将其从目录队列中删除
30     }
31 
32     return 1;
33 }
34 
35 
36 int main()
37 {
38     GetAllFilePath( _T("D:\\Project\\wxWidgets") );
39 
40     return 0;
41 }
复制代码

 

 



更多关于 wxWidgets 文件/文件夹的内容:
    [译] wxWidgets - File functions - 文件/文件夹函数


    [代码分享] wxWidgets - wxDir 遍历文件


    [译] wxWidgets - wxDir
    
    
    


--------------------



wid, 2013.03.08



上一篇: [代码分享] wxWidgets - wxDir 遍历文件



 

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示