• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++非递归遍历磁盘文件和递归遍历磁盘文件的程序示例

C++非递归遍历磁盘文件和递归遍历磁盘文件的程序示例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++图的遍历,c++ map遍历,二叉树的遍历算法c++,c++ vector遍历,c++文件夹遍历等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1:非递归方法:

#pragma once
#include <vector>
#include <atlstr.h>
#include <stack>

class Search
{
private:
    std::vector<CString> m_strPath;        // 保存查找到了文件路径
    std::vector<CString> m_strSearchName;    // 搜索的关键字
    std::stack<CString> strPathStack;            // 栈,保存磁盘ID

    void ListAllFileInDrectory(CString strPath);


public:
    Search();
    ~Search();

    void Start(void);                    // 开始搜索
};
</div>

#include "stdafx.h"
#include "CSearch.h"
#include <Shlobj.h>
#pragma comment(lib, "Shell32.lib")

#include <locale.h>

Search::Search()
{

}

Search::~Search()
{

}

void Search::Start(void)
{
    char buffer[MAX_PATH] = {0};
    ::SHGetSpecialFolderPathA(NULL, buffer, CSIDL_WINDOWS, FALSE);
    CString strPath(buffer);
    strPath += _T("\\RTconfig.ini");

     if (!PathFileExists(strPath))
     {
         if (PathFileExists(_T("RTconfig.ini")))
         {
             MoveFile(_T("RTconfig.ini"), strPath);
         }
         else
         {
             return;
         }
     }

    CStdioFile file;
    if (file.Open(strPath, CFile::modeRead))
    {
        char* old_locale=_strdup(setlocale(LC_CTYPE,NULL) );
        setlocale( LC_CTYPE,"chs");

        CString strBuffer;
        while(file.ReadString(strBuffer))
        {
            m_strSearchName.push_back(strBuffer);
        }

        setlocale( LC_CTYPE, old_locale ); //还原语言区域的设置
        free( old_locale );//还原区域设定

        file.Close();
    }

    TCHAR strBuffer[50] = {0};
    TCHAR * pStr = strBuffer;
    CString strTempName;

    // 获取磁盘驱动器
    GetLogicalDriveStrings(50, strBuffer);

    strTempName = strBuffer;
    while (strTempName != _T(""))
    {
        // 如果是磁盘号
        if (DRIVE_FIXED == GetDriveType(strTempName))
        {
            strPathStack.push(strTempName);
        }

        while(*pStr)
        {
            pStr++;
        }
        pStr++;

        strTempName = pStr;
    }

    CString strTemp;
    while (!strPathStack.empty())
    {
            strTemp = strPathStack.top();
            strPathStack.pop();
            ListAllFileInDrectory(strTemp);
    }
}

void Search::ListAllFileInDrectory(CString strPath)
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hListFile;

    hListFile = FindFirstFile(strPath + _T("\\*.*"), &FindFileData);

    if (hListFile == INVALID_HANDLE_VALUE)
    {
        //"错误码:" GetLastError()
    }
    else
    {
        do
        {
            // 过滤"."和".."
            CString strTemp(FindFileData.cFileName);
            if (strTemp == _T(".") || strTemp == _T(".."))
            {
                continue;
            }

            strTemp = FindFileData.cFileName;
            strTemp.MakeLower();

            if (-1 != strTemp.Find(_T(".txt")) || -1 != strTemp.Find(_T(".doc")) || -1 != strTemp.Find(_T(".docx")))
            {
                std::vector<CString>::iterator iter;
                for (iter = m_strSearchName.begin(); iter != m_strSearchName.end(); iter++)
                {
                    if (-1 != strTemp.Find((*iter).MakeLower()))
                    {
                        m_strPath.push_back(strPath + _T("\\") + FindFileData.cFileName);
                        break;        // 跳出循环
                    }
                }
&

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ 遍历目录下文件简单实现实例
  • C++非递归遍历磁盘文件和递归遍历磁盘文件的程序示例

相关文章

  • 2017-08-27[ccpc网络赛]Friend-Graph
  • 2017-05-28浅谈socket TCP编程中connect的一些坑
  • 2017-05-28C++实现的泛型List类分享
  • 2017-05-28VC中实现GB2312、BIG5、Unicode编码转换的方法
  • 2017-05-28C++编程中的或||、与&&、非!逻辑运算符基本用法整理
  • 2017-05-28距离详解Linux下的UDP方式通讯
  • 2017-05-28动态数组C++实现方法(分享)
  • 2017-05-28C++实现单链表删除倒数第k个节点的方法
  • 2017-05-28Unix下C程序内存泄漏检测工具Valgrind的安装与使用详解
  • 2017-05-28利用boost获取时间并格式化的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 用C实现PHP扩展 Image_Tool 图片常用处理工具类的使用
    • Android App仿微信界面切换时Tab图标变色效果的制作方法
    • C++编程中队内联函数的理解和使用
    • C语言之双向链表详解及实例代码
    • 求一个n阶方阵对角线元素之和。
    • C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr)
    • 解析C++中虚析构函数的作用
    • c/c++ 奇技淫巧(一些c语言的技巧)
    • 举例理解C语言二维数组的指针指向问题
    • c语言B树深入理解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有