程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 獲取當前目錄下的文件,目錄 (封裝)

獲取當前目錄下的文件,目錄 (封裝)

編輯:C++入門知識

/* 函數使用案例: vector<string> luaFiles; //GetLuaFileList(GetRootPath(), luaFiles); CFileAndDirFinder cFileAndDirFinder; //cFileAndDirFinder.FindAllDir(GetRootPath(), luaFiles); //cFileAndDirFinder.FindAllFile(GetRootPath(), "*.txt", luaFiles); cFileAndDirFinder.FindAllFileE(GetRootPath(), "*.txt", luaFiles);     vector<string>::iterator it = luaFiles.begin(); for (; it!=luaFiles.end(); ++it) { cout << it->c_str() << endl; } */     #pragma once     class CFileAndDirFinder { public: CFileAndDirFinder(void); ~CFileAndDirFinder(void);     // 查找當前目錄下的所有目錄(不包括當前目錄) void FindAllDir(const char* pCurDir, vector<string>& vtDirs); // 查找當前目錄下的所有文件(不包括子目錄),制定查找文件類型,如:*.txt,*.lua,*.* void FindAllFile(const char* pCurDir, const char* pFileType, vector<string>& vtFiles); // 查找當前目錄下的所有文件(包括子目錄),制定查找文件類型,如:*.txt,*.lua,*.* void FindAllFileE(const char* pCurDir, const char* pFileType, vector<string>& vtFiles);     };     #include "StdAfx.h" #include "FileAndDirFinder.h"     CFileAndDirFinder::CFileAndDirFinder(void) { }     CFileAndDirFinder::~CFileAndDirFinder(void) { }     void CFileAndDirFinder::FindAllDir( const char* pCurDir, vector<string>& vtDirs ) { // 當前目錄 char szDir[MAX_PATH] = {0}; _snprintf(szDir, MAX_PATH, "%s\\*.*", pCurDir);     WIN32_FIND_DATA findFileData = {0}; HANDLE hFind = FindFirstFile((LPCSTR)szDir, &findFileData);     if (INVALID_HANDLE_VALUE == hFind) { return ; }     do { /* 返回的文件名中會包含"."和".."。“.'代表本目錄,".."代表上一層目錄。 一般情況下需要把這兩個名稱過濾掉。比如要進行文件刪除操作 */ if (findFileData.cFileName[0] != '.')//不是當前路徑或者父目錄的快捷方式 { if(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // 這是一個普通目錄 char tmpDir[MAX_PATH] = {0}; _snprintf(tmpDir, MAX_PATH, "%s\\%s", pCurDir, findFileData.cFileName); vtDirs.push_back(tmpDir);     // 遞歸調用查找子目錄 FindAllDir(tmpDir, vtDirs); } } }while (FindNextFile(hFind, &findFileData));     FindClose(hFind); hFind = INVALID_HANDLE_VALUE; }     void CFileAndDirFinder::FindAllFile( const char* pCurDir, const char* pFileType, vector<string>& vtFiles ) { // 當前目錄 char szDir[MAX_PATH] = {0}; _snprintf(szDir, MAX_PATH, "%s\\%s", pCurDir, pFileType);     WIN32_FIND_DATA findFileData = {0}; HANDLE hFind = FindFirstFile((LPCSTR)szDir, &findFileData);     if (INVALID_HANDLE_VALUE == hFind) { return ; }     do { /* 返回的文件名中會包含"."和".."。“.'代表本目錄,".."代表上一層目錄。 一般情況下需要把這兩個名稱過濾掉。比如要進行文件刪除操作 */ if (findFileData.cFileName[0] != '.')//不是當前路徑或者父目錄的快捷方式 { // 這是一個文件 char tmpFile[MAX_PATH] = {0}; _snprintf(tmpFile, sizeof(tmpFile)-1, "%s\\%s", pCurDir, findFileData.cFileName);     vtFiles.push_back(tmpFile); } }while (FindNextFile(hFind, &findFileData));     FindClose(hFind); hFind = INVALID_HANDLE_VALUE; }     void CFileAndDirFinder::FindAllFileE( const char* pCurDir, const char* pFileType, vector<string>& vtFiles ) { // 獲取子目錄 vector<string> vtDirs; FindAllDir(pCurDir, vtDirs);     // 加入當前目錄 vtDirs.push_back(pCurDir);     vector<string>::iterator itDir = vtDirs.begin(); for (; itDir!=vtDirs.end(); ++itDir) { FindAllFile(itDir->c_str(), pFileType, vtFiles); } }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved