#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++遍历目录和文件的源码的更多相关文章

  1. Linux下遍历目录及文件,更改权限

    Linux下遍历目录及文件,更改权限 引言: 我在Linux下搭建android时,将eclipse及sdk复制到/usr/下时,总会出现无法读,无法写写样的问题. 解决方案: 有两个方案: 一.将复 ...

  2. 【app】遍历目录所有文件

    遍历目录所有文件   原创,转载时请注明,谢谢.邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:htt ...

  3. Winforn中DevExpress的TreeList中显示某路径下的所有目录和文件(附源码下载)

    场景 Winform中DevExpress的TreeList的入门使用教程(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  4. Java文件操作源码大全

    Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ...

  5. Eclipse安装反编译插件,查看.class文件的源码

    2017-08-24 这样我们就可以通过Eclipse查看.class文件的源码了. 1.参考别人的博客,亲测有效 https://www.cnblogs.com/JealousGirl/p/setu ...

  6. 64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 )

    64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 ) [PS: 如果在64位系统下,出现调用测试demo,返回false的情况下,请修改Hook Dll的代码] glhH ...

  7. Django的settings文件部分源码分析

    Django的settings文件部分源码分析 在编写Django项目的过程中, 其中一个非常强大的功能就是我们可以在settings文件配置许多选项来完成我们预期的功能, 并且这些配置还必须大写, ...

  8. eclipse查看class文件的源码

    eclipse查看class文件的源码: 1.网上下载jadClipse的jar包和执行文件jad.exe和 net.sf.jadclipse_3.3.0.jar. 2.把上面下载的jar包放在ecp ...

  9. Asp.Net Web Api 2 实现多文件打包并下载文件示例源码_转

    一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:<ASP.NET(C#) Web Api通过文件流下载文件到本地实例>本文以这篇文章的基础,提供了Byt ...

随机推荐

  1. UI标签库专题十三:JEECG智能开发平台 ckfinder(ckfinder插件标签)

    1. ckfinder(ckfinder插件标签) 1.1. 參数 属性名 类型 描写叙述 是否必须 默认值 name string 属性名称 是 null value string 默认值 否 nu ...

  2. JAVA装饰器模式

    Java程序员们应该对java.io对不会陌生,因为java.io包采用了装饰器模式. 一.定义: Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样 ...

  3. Setup Factory

    Setup Factory   生成安装程序

  4. DOM元素对象的属性和方法(2)

    11.contentEditable 作用:设置或返回元素内容可否编辑布尔值,HTML5新增属性 <!DOCTYPE html> <html> <head> < ...

  5. ajax 实例

    jsp页面代码: <script type="text/javascript"> var xmlHttp; function createXMLHttp(){ if(w ...

  6. 【转】CodeGear RAD 2007 SP4

    转自:http://blog.csdn.net/Rzhghost/article/details/2512150 CodeGear RAD 2007 up4最新下载及破解 官方http下载:http: ...

  7. Apache Tomcat Not Showing in Eclipse Server Runtime Environments

    In my case I needed to install "JST Server Adapters". I am running Eclipse 3.6 Helios RCP ...

  8. scanf 和cin 的区别

    笔试的时候经常遇到突然string s;cin>>s; 有的时候编译会错误,不知道为什么. 今天在练习枚举类型的时候,也遇到这样一个问题. enum weekday{Monday,Tues ...

  9. mongodb 备份与恢复

    备份 mongodump -d dbname -o backup 例如 mongodump -d student -o backup 恢复 mongorestore -d dbname -o back ...

  10. BZOJ 3221: [Codechef FEB13] Obserbing the tree树上询问( 可持久化线段树 + 树链剖分 )

    树链剖分+可持久化线段树....这个一眼可以看出来, 因为可持久化所以写了标记永久化(否则就是区间修改的线段树的持久化..不会), 结果就写挂了, T得飞起...和管理员拿数据调后才发现= = 做法: ...