亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++非遞歸遍歷磁盤文件和遞歸遍歷磁盤文件的程序示例

2020-01-26 15:41:56
字體:
來源:轉載
供稿:網友

1:非遞歸方法:

復制代碼 代碼如下:

// File Name: CSearch.h

#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);                    // 開始搜索
};

復制代碼 代碼如下:

// File Name: CSearch.cpp

#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("http://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("http://*.*"), &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("http://") + FindFileData.cFileName);
                        break;        // 跳出循環
                    }
                }
            }

            // 如果是目錄 且不是系統屬性目錄 壓棧
            if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY && !(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM))
            {
                    strPathStack.push(strPath + _T("http://") + FindFileData.cFileName);
            }
        }
        while(FindNextFile(hListFile, &FindFileData));
    }

    FindClose(hListFile);            // 關閉句柄,不然造成內存溢出
}

2:遞歸方法

復制代碼 代碼如下:

// File Name: CSearch.h

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

class Search
{
private:
    std::vector<CString> m_strPath;        // 保存查找到了文件路徑
    std::vector<CString> m_strSearchName;    // 搜索的關鍵字

    void ListAllFileInDrectory(CString strPath);


public:
    Search();
    ~Search();

    void Start(void);                    // 開始搜索
};

復制代碼 代碼如下:

// File Name: CSearch.cpp

#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("http://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))
        {
            ListAllFileInDrectory(strTempName);
        }

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

        strTempName = pStr;
    }
}

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

    hListFile = FindFirstFile(strPath + _T("http://*.*"), &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("http://") + FindFileData.cFileName);
                        break;        // 跳出循環
                    }
                }
            }

            // 如果是目錄 且不是系統屬性目錄 遞歸調用
            if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY && !(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM))
            {
                    ListAllFileInDrectory(strPath + _T("http://") + FindFileData.cFileName);
            }
        }
        while(FindNextFile(hListFile, &FindFileData));
    }

    FindClose(hListFile);            // 關閉句柄,不然造成內存溢出
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩天堂一区二区| 亚洲第一在线视频| 精品精品国产国产自在线| 欧美日韩国产精品一区二区不卡中文| 欧美性猛交丰臀xxxxx网站| 2019中文字幕在线| 久久国产精品首页| 国产视频久久久久久久| 亚洲美女在线观看| 亚洲欧美激情另类校园| 亚洲自拍欧美另类| 日韩成人中文字幕| 91在线色戒在线| 中文字幕综合一区| 欧美午夜影院在线视频| 久久91精品国产| 日本午夜精品理论片a级appf发布| 亚洲欧美制服另类日韩| 精品高清美女精品国产区| 一区二区三区回区在观看免费视频| 亚洲在线观看视频网站| 久久青草福利网站| 中文字幕国产亚洲| 亚洲欧美制服中文字幕| 欧美成人免费在线视频| 91伊人影院在线播放| 国产区亚洲区欧美区| 色播久久人人爽人人爽人人片视av| 久久国产天堂福利天堂| 日本久久亚洲电影| 国产国语刺激对白av不卡| 国产999精品| 91精品国产高清久久久久久久久| 中文字幕在线国产精品| 色噜噜狠狠色综合网图区| 欧美精品videos性欧美| 97视频人免费观看| 尤物99国产成人精品视频| 91免费在线视频| 亚洲午夜未满十八勿入免费观看全集| 欧美理论电影在线播放| 国产一区二区三区在线观看网站| 成人av番号网| 欧美影院成年免费版| 国产mv免费观看入口亚洲| 九色精品美女在线| 日韩高清电影好看的电视剧电影| 欧美日韩亚洲网| 精品久久久久久久大神国产| 亚洲综合精品伊人久久| 欧美性xxxxx极品娇小| 亚洲精品按摩视频| 成人疯狂猛交xxx| 亚洲国产精品成人一区二区| 国产在线98福利播放视频| 国产精品综合不卡av| 欧美日韩一区二区在线播放| 精品中文字幕久久久久久| 亚洲成人亚洲激情| 中文字幕国产日韩| 69久久夜色精品国产69| 成人中文字幕+乱码+中文字幕| 国产精品视频一区二区三区四| 亚洲欧美视频在线| 欧美最猛性xxxxx(亚洲精品)| 欧美成年人视频网站欧美| 久久久国产91| 国产精品久久久久久五月尺| 久久国产精品首页| 欧美性猛交丰臀xxxxx网站| 国产精品欧美久久久| 日韩视频一区在线| 成人网在线免费观看| 欧美与黑人午夜性猛交久久久| 欧美亚洲国产精品| 日韩一区二区三区xxxx| 国产精品亚洲综合天堂夜夜| 日本国产一区二区三区| 国模叶桐国产精品一区| 国产成人亚洲综合91精品| 欧美另类极品videosbest最新版本| 91久久久久久久一区二区| 97久久久免费福利网址| 97色在线视频观看| 91九色单男在线观看| 久久久久亚洲精品| 国产亚洲欧美视频| 97精品国产97久久久久久春色| 日韩av影院在线观看| 91久久在线播放| 久久久综合av| 日韩精品极品视频免费观看| 欧美精品激情blacked18| 国产精品日韩在线观看| 精品国产一区二区三区久久久| 国产精品久久久久久久久久小说| 51色欧美片视频在线观看| 精品国产精品三级精品av网址| 91极品视频在线| 疯狂做受xxxx高潮欧美日本| 久热精品视频在线观看| 狠狠综合久久av一区二区小说| 久久亚洲影音av资源网| xxav国产精品美女主播| 日韩有码在线观看| 97国产精品免费视频| 久久久久久久久久国产| 亚洲人成在线观| 亚洲成人三级在线| 欧美资源在线观看| 这里精品视频免费| 欧美性猛交xxxx乱大交| 国产精品吹潮在线观看| 91中文字幕一区| 欧美高清videos高潮hd| 欧美午夜视频在线观看| www国产精品com| 久久精品色欧美aⅴ一区二区| 色偷偷av亚洲男人的天堂| 国产成人精品日本亚洲| 91tv亚洲精品香蕉国产一区7ujn| 国产精品爱久久久久久久| 日韩专区在线播放| 亚洲欧美一区二区三区情侣bbw| 欧美日韩亚洲激情| 亚洲国产天堂久久综合网| 欧美激情视频在线观看| 亚洲精品成人免费| 亚洲欧美另类中文字幕| 久久久久久久一| 久久久久久久亚洲精品| 欧美日韩在线视频首页| 亚洲女人天堂网| 国产成人激情小视频| 欧美一级免费看| 夜夜躁日日躁狠狠久久88av| 亚洲视频免费一区| 91人人爽人人爽人人精88v| 国产欧美日韩专区发布| 欧美大尺度激情区在线播放| 国产精品一区二区av影院萌芽| 日韩中文综合网| 美女啪啪无遮挡免费久久网站| 国产精品96久久久久久又黄又硬| 欧美一区二区大胆人体摄影专业网站| 伦理中文字幕亚洲| 亚洲欧美国产日韩天堂区| 国产精品一区二区3区| 国产午夜精品免费一区二区三区| 国产精品久久久久久影视| 国产免费一区二区三区在线能观看| 国产精品一区二区av影院萌芽| 成人高清视频观看www| 欧美一区二区影院| 久久久久久久999精品视频| 国产精品人成电影| 久久久国产一区| 亚洲精品久久久久久久久久久| 国产亚洲视频在线观看| 性欧美激情精品| 国产精品中文久久久久久久| 日韩精品中文字幕视频在线| 色偷偷偷综合中文字幕;dd| 97精品视频在线|