Win32下C++遍历目录和文件的源码
#include<windows.h>
#include<iostream>
#include<string>
using namespace std;
//只能处理目录:lpPath只能是路径
void find(char *lpPath)
{
char szFind[MAX_PATH];
char szFile[MAX_PATH];
WIN32_FIND_DATA FindFileData;
strcpy(szFind,lpPath);
strcat(szFind,"//*.*");
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!='.')
{
strcpy(szFile,lpPath);
strcat(szFile,"//");
strcat(szFile,FindFileData.cFileName);
find(szFile);
}
}
else
{
cout<<FindFileData.cFileName<<endl;
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
FindClose(hFind);
}
//可同时处理目录和文件:path可以是路径,也可以是文件名,或者文件通配符
void _find(string path){
//取路径名最后一个"//"之前的部分,包括"//"
string prefix=path.substr(0,path.find_last_of('//')+1);
WIN32_FIND_DATA FindFileData;
HANDLE hFind=::FindFirstFile(path.c_str(), &FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
{
cout<<"文件通配符错误"<<endl;
return;
}
while(TRUE)
{
//目录
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//不是当前目录,也不是父目录
if(FindFileData.cFileName[0]!='.')
{
//查找下一级目录
_find(prefix+FindFileData.cFileName+"//"+"*.*");
}
}
//文件
else
{
cout<<FindFileData.cFileName<<endl;
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
FindClose(hFind);
}
void main(){
//find("E:");//目录:E盘
//_find("E://*.*");//E盘下所有文件
string str="./test"; //这里指定的是目录
//string path;
//cout<<"请输入文件通配符:"<<flush;
//cin>>path;
// str=str+path;
find((char*)str.c_str());//可以处理".",".." 不可以处理"*","..//*"
//_find(str);//可以处理"*","..//*" 不可以处理".",".."
system("pause");
}
复制代码
其中有个结构体,它是C++自带的,是这样的:
typedef struct _WIN32_FIND_DATA{
DWORD dwFileAttributes; // 文件属性
FILETIME ftCreationTime; // 文件创建时间
FILETIME ftLastAccessTime; // 文件最后一次访问时间
FILETIME ftLastWriteTime; // 文件最后一次修改时间
DWORD nFileSizeHigh; // 文件长度高 32 位
DWORD nFileSizeLow; // 文件长度低 32 位
DWORD dwReserved0; // 系统保留
DWORD dwReserved1; // 系统保留
TCHAR cFileName[ MAX_PATH ]; // 长文件名
TCHAR cAlternateFileName[ 14 ]; // 文件的可选名
} WIN32_FIND_DATA;
Win32下C++遍历目录和文件的源码的更多相关文章
- Linux下遍历目录及文件,更改权限
Linux下遍历目录及文件,更改权限 引言: 我在Linux下搭建android时,将eclipse及sdk复制到/usr/下时,总会出现无法读,无法写写样的问题. 解决方案: 有两个方案: 一.将复 ...
- 【app】遍历目录所有文件
遍历目录所有文件 原创,转载时请注明,谢谢.邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:htt ...
- Winforn中DevExpress的TreeList中显示某路径下的所有目录和文件(附源码下载)
场景 Winform中DevExpress的TreeList的入门使用教程(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Java文件操作源码大全
Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ...
- Eclipse安装反编译插件,查看.class文件的源码
2017-08-24 这样我们就可以通过Eclipse查看.class文件的源码了. 1.参考别人的博客,亲测有效 https://www.cnblogs.com/JealousGirl/p/setu ...
- 64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 )
64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 ) [PS: 如果在64位系统下,出现调用测试demo,返回false的情况下,请修改Hook Dll的代码] glhH ...
- Django的settings文件部分源码分析
Django的settings文件部分源码分析 在编写Django项目的过程中, 其中一个非常强大的功能就是我们可以在settings文件配置许多选项来完成我们预期的功能, 并且这些配置还必须大写, ...
- eclipse查看class文件的源码
eclipse查看class文件的源码: 1.网上下载jadClipse的jar包和执行文件jad.exe和 net.sf.jadclipse_3.3.0.jar. 2.把上面下载的jar包放在ecp ...
- Asp.Net Web Api 2 实现多文件打包并下载文件示例源码_转
一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:<ASP.NET(C#) Web Api通过文件流下载文件到本地实例>本文以这篇文章的基础,提供了Byt ...
随机推荐
- linux 进程(二) --- 进程的创建及相关api
一.进程的创建fork()函数 由fork创建的新进程被称为子进程(child process).该函数被调用一次,但返回两次.两次返回的区别是子进程的返回值是0,而父进程的返回值则是 新子进程的进 ...
- C#数据绑定中,时间为空时显示时间为原始日期问题
这个问题一般出现在用实体时,实体的时间格式没有加?号.加了之后就默认为空,没有数据时不会为原始时间了.
- C#去掉字符串中的汉字
string str = "测试一下ilove中国so结束"; Regex reg = new Regex(@"[\u4e00-\u9fa5]"); Label ...
- 改良版的SQL Service 通用存储过程分页
上次写了通用存储过程.感觉还是有很大的BUG.就是条件不能参数画化.这个BUG可以说是致命的.但是我一直想在用什么方法能解决这个东西.其实我只是想写少量的代码来做更多的事情.我想能不能传集合给存储过程 ...
- [转]不用Cookie的“Cookie”技术
有另外一种比较隐蔽的用户追踪技术,不使用cookie或者Javascript.很多网站已经在用了,但知道的人不多.本文就来介绍一下这种技术是如何追踪用户,用户又该如何避免追踪. 这种技术不依赖于: C ...
- api(一) 创建窗口 (转)
所有的Windows SDK编程都有一个类似的框架,本文就说说这个框架,Windows程序设计的框架分为“三部曲”: 一.注册窗口类 注册窗口类的API函数是RegisterClass或者Regist ...
- EC读书笔记系列之2:条款4 确定对象被使用前已先被初始化
条款4:确定对象被使用前已先被初始化 记住: ★为内置对象进行手工初始化,因为C++不保证初始他们 ★构造函数最好使用初始化列表,而不要在构造函数本体内使用赋值操作.初始化列表列出的成员变量,其排列次 ...
- poj1160
题目大意:在一个一维坐标轴上有v个(1<=v<=300)村庄,要建p(1<=p<=30)个邮局,每个村庄都到最近的邮局,要求最小的距离和. 四边形不等式,据说黑书上写得很高 ...
- Android Every day a new function:two
分享功能: 效果图: 代码(分享TEXT,视频或者图片设置type即可): @Override protected void onCreate(Bundle savedInstanceState) { ...
- Flink资料(1)-- Flink基础概念(Basic Concept)
Flink基础概念 本文描述Flink的基础概念,翻译自https://ci.apache.org/projects/flink/flink-docs-release-1.0/concepts/con ...