Windows遍历路径
来源:互联网 发布:二维的软件 编辑:程序博客网 时间:2024/06/05 18:11
说明
用到的主要API:
- FindFirstFile()
- FindNextFile()
- FindClose()
用到的主要数据结构:
- WIN32_FIND_DATA
其用法自行查阅MSDN或其他地方, 有很多资料, 这里不再复述.
代码
DirectoryTraverser.h
#pragma once#include <windows.h>#ifndef __in#define __in#endif#ifndef __out#define __out#endiftypedef void(*TraverseCallback)(const LPWIN32_FIND_DATA, void*);class CDirectoryTraverser{public:CDirectoryTraverser(__in TraverseCallback callback);~CDirectoryTraverser();private:bool IsDirectory(__in const TCHAR*);void RecurringTraverse(__in const TCHAR*);TraverseCallback fTraverseCallback_;void* p_user_data_;TCHAR pts_type_[MAX_PATH];public:bool Traverse(__in const TCHAR*, __in void* p_user_data);void SetType(__in const TCHAR*);};
DirectoryTraverser.cpp
#include "DirectoryTraverser.h"#include <iostream>#include <tchar.h>CDirectoryTraverser::CDirectoryTraverser(__in TraverseCallback callback): fTraverseCallback_(callback), p_user_data_(NULL){int n = sizeof(pts_type_);memset(pts_type_, 0, MAX_PATH);}CDirectoryTraverser::~CDirectoryTraverser(){}bool CDirectoryTraverser::Traverse(__in const TCHAR* pts_path, __in void* p_user_data){p_user_data_ = p_user_data;if (!IsDirectory(pts_path))return false;RecurringTraverse(pts_path);return true;}bool CDirectoryTraverser::IsDirectory(__in const TCHAR* pts_path){HANDLE hFind = INVALID_HANDLE_VALUE;WIN32_FIND_DATA wfd = { 0 };hFind = FindFirstFile(pts_path, &wfd);if (INVALID_HANDLE_VALUE == hFind)return false;if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)return true;elsereturn false;}void CDirectoryTraverser::RecurringTraverse(__in const TCHAR* pts_path){if (pts_path == NULL)return;HANDLE hFind = INVALID_HANDLE_VALUE;WIN32_FIND_DATA wfd = { 0 };TCHAR pts_path_buf[MAX_PATH] = { 0 };if (pts_type_[0] == 0)_stprintf_s(pts_path_buf, MAX_PATH, _T("%s\\*"), pts_path);else_stprintf_s(pts_path_buf, MAX_PATH, _T("%s\\*.%s"), pts_path, pts_type_);hFind = FindFirstFile(pts_path_buf, &wfd);if (INVALID_HANDLE_VALUE == hFind)return;do{if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){if (_tcscmp(wfd.cFileName, _T(".")) != 0&& _tcscmp(wfd.cFileName, _T("..")) != 0)RecurringTraverse(wfd.cFileName);}else if (fTraverseCallback_)fTraverseCallback_(&wfd, p_user_data_);elsebreak;} while (FindNextFile(hFind, &wfd) != 0);FindClose(hFind);}void CDirectoryTraverser::SetType(__in const TCHAR* str_type){_tcscpy_s(pts_type_, MAX_PATH, str_type);}
使用
// TEST_DirectoryTraverser.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "DirectoryTraverser.h"static void TraverserDirectoryCallback(LPWIN32_FIND_DATA p_wfd, void* p_user_data){_tprintf(_T("%s\r\n"), p_wfd->cFileName);}int _tmain(int argc, _TCHAR* argv[]){CDirectoryTraverser dt(TraverserDirectoryCallback);dt.SetType(_T("ttf"));bool b_result = dt.Traverse(_T("C:\\Windows\\Fonts"), NULL);if (b_result)_tprintf(_T("Traverse Successful\r\n"));else_tprintf(_T("Traverse Failed\r\n"));_tsystem(_T("pause"));return 0;}
0 0
- Windows遍历路径
- windows C++ 遍历目录,获取文件名和文件路径
- windows C++ 遍历目录,获取文件名和文件路径
- windows路径
- windows 路径
- 递归遍历某一路径下的所有文件(for windows or linux)
- [转]递归遍历某一路径下的所有文件(for windows or linux)
- ewebeditor遍历路径漏洞
- 遍历所有路径
- 路径下文件遍历
- 遍历图的路径
- 遍历路径 recursion
- 002.PHP遍历路径
- php遍历路径文件
- 深度优先遍历求最短路径
- iOS 文件路径深度遍历
- 各种路径遍历二维数组
- 遍历文件夹windows
- centos vsftp
- boost 库 enable_shared_from_this 实现原理分析
- SQLSERVER填充因子
- 测试下
- Android中,HttpURLConnection与Apache的DefaultHttpClient哪个更被推荐使用?
- Windows遍历路径
- ace bootstrap后台框架-左侧菜单
- 注册 未写完!
- touchbegan 单个手指的识别----UIView 的exclusiveTouch属性
- powerdesigner生成的数据库中没有字段说明的解决办法
- 线性代数复习1. 视角
- 有什么消息吗?今天的银行股和证券股怎么都跌停了?
- 天声人語 20150119
- 做ecshop选项卡,但由于ecshop与jquery冲突原因,不想用jquery,所以自己做了个tab卡