博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蚊子132 写的一个 CFileFind 遍历代码非常简单可读
阅读量:3518 次
发布时间:2019-05-20

本文共 1870 字,大约阅读时间需要 6 分钟。

原文:

用CFileFind类实现的目录树遍历

作者:崔晓亮    写的一个 CFileFind 遍历代码非常简单可读 目录树遍历顾名思义就是把目录树中所有的目录及文件依次查找一遍,WINDOWS里的文件查找程序和SafeClean Utilities(环保卫士)等都用到了目录树遍历。我们当然也可以在自己的程序中加入这一功能。
     下面就是该算法的源代码。代码不长,应该很好懂。大家只要在工程中添加一个 Search 类再将代码拷贝到文件中就可以了。调用时用如下代码: Search find("c:\", "*.exe"); find.Start;按 F5 运行后可以在调试信息窗口看到输出,如有不妥之处还望各位来信指教。
一、文件 Search.h
// Search.h: interface for the Search class. // ...
class Search
{
public:
Search(CString strFilePath, CString strFileName);
void Start();
virtual ~Search();
private:
void Run();
char m_szOldDir[MAX_PATH]; // 遍历前的起始目录
CString m_strFileName;
};
二、文件 Search.cpp
// Search.cpp: implementation of the Search class.
#include "stdafx.h"
#include "Search.h"
#include "direct.h"
Search::Search(CString strFilePath, CString strFileName)
{
getcwd(m_szOldDir, MAX_PATH); // 保存遍历前的起始目录
if(chdir((LPCTSTR)strFilePath) == -1) // 进入指定目录
AfxMessageBox("路径错误");
m_strFileName = strFileName;
} //---------------------------------------------------------------------
void Search::Start()
{
BOOL ans;
CFileFind find;
Run(); // 在每一个目录下执行自定义的操作
ans = find.FindFile("*.*");
while(ans)
{
ans = find.FindNextFile(); // 查找下一个文件
// 查找到的如果是目录并且不是 . 或 ..
if((find.IsDirectory() == TRUE) && (find.IsDots() != TRUE))
{
chdir((LPCTSTR)find.GetFilePath()); // 如果是目录则进入继续查找
Start(); // 递归调用
chdir(".."); // 返回后回到上一层目录继续查找
}
} // End of while
find.Close();
return;
} //---------------------------------------------------------------------
Search::~Search() { chdir(m_szOldDir); // 返回遍历前的起始目录 }
//---------------------------------------------------------------------
void Search::Run()
{
BOOL run_ans;
CFileFind run_find; // m_strFileName 就是 Search 构造函数的第二个参数
run_ans = run_find.FindFile(m_strFileName);
while(run_ans)
{
run_ans = run_find.FindNextFile();
if(!run_find.IsDots())
{ // TODO: 请在这里添加你的代码
TRACE("\n%s", run_find.GetFilePath());
}
}
run_find.Close();
return;
}

相关帖子



转载地址:http://waxqj.baihongyu.com/

你可能感兴趣的文章
小白学习[leetcode]之946验证栈序列
查看>>
小白讲java的双亲委派机制(言简意赅)
查看>>
java中解决String equals相同但===不同的问题
查看>>
Java new一个对象的过程
查看>>
程序员代码面试指南之窗口最大值数组
查看>>
selenium之 chromedriver与chrome版本映射表
查看>>
小白解决:‘chromedriver‘ executable needs to be in PATH的问题(亲测有效)
查看>>
Cannot find class [org.apache.commons.dbcp.BasicDataSource(亲测有效)
查看>>
小白学习[leetcode]之402移掉k位数字
查看>>
DNN和RNN和DNN之间的区别
查看>>
小白学习[leetcode]之215数组中的第K个最大元素
查看>>
Java 将PDF 转为Word、图片、SVG、XPS、Html、PDF/A(亲测有效)
查看>>
小白学习之程序员代码面试指南之单调栈结构
查看>>
小白之java虚拟机工作学习面试准备(持续更新)
查看>>
小白学习[leetcode]之455分发饼干 (贪心算法)
查看>>
小白学习[leetcode]之135分发糖果 (贪心算法)
查看>>
小白读论文之. Show and Tell Lessons learned from the 2015 MSCOCO Image Captioning Challenge
查看>>
小白学习[leetcode]之435无重叠区间(贪心算法)
查看>>
java二维数组使用lambda表达式进行排序
查看>>
java图解从编译到运行(详细)
查看>>