windows编程之目录遍历

利用windows的API,FindFirstFile和FileNextFile,採用递归遍历指定目录中的全部文件及目录,第一次windows编程。代码写的非常臃肿难看。请大家多多包涵!

#include<cstdio>
#include<cstring>
#include<iostream>
#include<windows.h>

#define MAXN 100005

using namespace std;

void surf(WIN32_FIND_DATA myData)
{
	cout<<myData.ftCreationTime.dwLowDateTime<<endl;
	cout<<myData.ftLastAccessTime.dwLowDateTime<<endl;
	cout<<myData.ftLastWriteTime.dwLowDateTime<<endl;
	SYSTEMTIME ctime , atime , wtime;
	FileTimeToSystemTime(&myData.ftCreationTime , &ctime);
	FileTimeToSystemTime(&myData.ftLastAccessTime , &atime);
	FileTimeToSystemTime(&myData.ftLastWriteTime , &wtime);
	printf("%d年%d月%d日%d时%d分%d秒\n"
		 , ctime.wYear , ctime.wMonth , ctime.wDay , ctime.wHour , ctime.wMinute , ctime.wSecond);
	printf("%d年%d月%d日%d时%d分%d秒\n"
		 , atime.wYear , atime.wMonth , atime.wDay , atime.wHour , atime.wMinute , atime.wSecond);
	printf("%d年%d月%d日%d时%d分%d秒\n"
		 , wtime.wYear , wtime.wMonth , wtime.wDay , wtime.wHour , wtime.wMinute , wtime.wSecond);
	cout<<endl<<endl;
}

void traverse(char *Str)
{
	WIN32_FIND_DATA myData;
	HANDLE hFind = INVALID_HANDLE_VALUE;
	char str[MAX_PATH] = {0};
	strcpy(str , Str);
	strcat(str , "/*");		//使用通配符进行匹配
	hFind = FindFirstFile(str , &myData);
	if(INVALID_HANDLE_VALUE == hFind)
		return ;
	while(FindNextFile(hFind , &myData))
	{
		if(myData.cFileName[0] != ‘.‘)		//非返回文件夹时进行下一步
		{
			cout<<"========="<<myData.cFileName<<"=========="<<endl;
			surf(myData);
			if(myData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)		//推断是否为文件夹
			{
				char dir[MAX_PATH] = {0};
				snprintf(dir , MAX_PATH, "%s/%s" , Str , myData.cFileName);	//构造路径
				traverse(dir);
			}
		}
	}
	FindClose(hFind);	//关闭句柄
}

int main()
{
	char *str = "./test";
	traverse(str);
}

我的当前目录下的test目录有“haha”目录以及test.1 , test , 2 , test , 3三个文件,"haha"目录里又含有“ai”目录以及haha.1 , haha.2 , haha.3三个文件。“ai”目录里又含有“wo”目录以及ai.1 , ai.2 , ai.3三个文件,"wo"目录里有wo.1 , wo.2 , wo.3三个文件。。

程序输出结果:

=========haha==========

1556376338

2156419021

2156419021

2014年5月31日10时16分18秒

2014年5月31日10时24分27秒

2014年5月31日10时24分27秒

=========ai==========

2147248496

772195107

772195107

2014年5月31日10时24分27秒

2014年5月31日11时26分34秒

2014年5月31日11时26分34秒

=========ai.1==========

2197291359

2197291359

2197291359

2014年5月31日10时24分32秒

2014年5月31日10时24分32秒

2014年5月31日10时24分32秒

=========ai.2==========

2197291359

2328198846

2328198846

2014年5月31日10时24分32秒

2014年5月31日10时24分45秒

2014年5月31日10时24分45秒

=========ai.3==========

2197291359

2387262224

2387262224

2014年5月31日10时24分32秒

2014年5月31日10时24分51秒

2014年5月31日10时24分51秒

=========wo==========

752914004

2835575798

2835575798

2014年5月31日11时26分33秒

2014年5月31日15时40分33秒

2014年5月31日15时40分33秒

=========wo.1==========

806557072

806557072

806557072

2014年5月31日11时26分38秒

2014年5月31日11时26分38秒

2014年5月31日11时26分38秒

=========wo.2==========

870010701

870010701

870010701

2014年5月31日11时26分44秒

2014年5月31日11时26分44秒

2014年5月31日11时26分44秒

=========wo.3==========

870010701

923383754

923383754

2014年5月31日11时26分44秒

2014年5月31日11时26分50秒

2014年5月31日11时26分50秒

=========haha.1==========

1601118898

1601118898

1601118898

2014年5月31日10时16分22秒

2014年5月31日10时16分22秒

2014年5月31日10时16分22秒

=========haha.2==========

1601118898

1678113301

1678113301

2014年5月31日10时16分22秒

2014年5月31日10时16分30秒

2014年5月31日10时16分30秒

=========haha.3==========

1601118898

1742136963

1742136963

2014年5月31日10时16分22秒

2014年5月31日10时16分36秒

2014年5月31日10时16分36秒

=========test.1==========

1835930690

1835930690

1601118898

2014年5月31日10时23分55秒

2014年5月31日10时23分55秒

2014年5月31日10时16分22秒

=========test.2==========

1924505756

1924505756

1678113301

2014年5月31日10时24分4秒

2014年5月31日10时24分4秒

2014年5月31日10时16分30秒

=========test.3==========

1924535758

1924535758

1742136963

2014年5月31日10时24分4秒

2014年5月31日10时24分4秒

2014年5月31日10时16分36秒

时间: 2024-10-27 10:50:57

windows编程之目录遍历的相关文章

Windows编程 - 开启/关闭/遍历程序的类 代码(C++)

开启/关闭/遍历程序的类 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 类包含4个函数, 启动程序, 遍历所有进程, 关闭程序, 遍历进程依赖的动态链接库. 示例: Image.exe是预先生成的可执行程序(exe), 启动程序, 间隔5秒, 关闭程序. 使用方法参加测试程序. 代码: /* * process.h * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #ifnde

Windows编程 - 遍历所有进程(exe) 代码(C++)

遍历所有进程(exe) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29381987 遍历所有进程, 即任务管理器中所有的进程目录, 包含名称和进程ID. 返回字典: Key: 进程名字, Value: 进程ID. 代码: /* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #

windows编程之文件夹遍历

利用windows的API,FindFirstFile和FileNextFile,采用递归遍历指定文件夹中的所有文件及文件夹,第一次windows编程,代码写的很臃肿难看,请大家多多包涵! <pre name="code" class="cpp">#include<cstdio> #include<cstring> #include<iostream> #include<windows.h> #define

Windows编程 - 遍历程序使用的动态链接库(dll) 代码(C++)

遍历程序使用的动态链接库(dll) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 遍历程序使用的动态链接库(dll), 首先需要遍历所有进程, 匹配进程名称与进程ID, 然后根据进程名称, 输出所有使用的库(dll). 示例中Image.exe是预先启动的程序. 代码包含遍历进程的代码, 和输出动态链接库(dll)的代码. 代码: /* * main.cpp * * Created on: 2014.06.08 * Author: Spike

跨平台的目录遍历实现方法(windows和linux已经测试)

dirent.h是gcc下的一个头文件,在windows中是没有的.这个文件中封装了几个对目录进行操作函数: static DIR *opendir (const char *dirname);static struct dirent *readdir (DIR *dirp);static int closedir (DIR *dirp); 对于在linux->windows之间进行程序移植来讲常常会造成一些困扰. 有一个开源的源码可以解决这个问题. 源码可以从下面的链接下载得到,这个源码是跨平

Windows编程 - 终止可执行(exe)程序 代码(C++)

终止可执行(exe)程序 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 终止可执行(exe)程序, 首先遍历进程, 找到进程名称对于的进程ID号, 然后根据进程ID, 终止进程. 示例代码: 包括遍历进程代码, 和关闭代码. 代码: /* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #include <

小白日记37:kali渗透测试之Web渗透-手动漏洞挖掘(三)-目录遍历、文件包含

手动漏洞挖掘 漏洞类型 #Directory traversal 目录遍历[本台机器操作系统上文件进行读取] 使用者可以通过浏览器/URL地址或者参数变量内容,可以读取web根目录[默认为:/var/www/]之外的其他操作系统文件(如:/etc/passwd/).形成根源:目录权限限制不严格 #File include文件包含[1.include本地文件包含LFI:2.远程系统文件包含RFI(可传入木马)] 通常为如include函数,可以将web根目录以外的目录包含进来.根源:include

有一定基础的 C++ 学习者该如何学习 Windows 编程?

人的心理有个奇妙的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解很快就会忘得干干净净,似乎一切都是自然而然,本来就该这样的.因此,关于「如何入门」这类问题,找顶尖高手来回答,未必能比一个刚入门不久的人来回答要好.就譬如最高票的那个回答,是一个非常精通 Windows 编程的高人回答的,但这样的答案能给初学者带来多少帮助,我这里想先打一个问号. 前段时间刚辅导了一个学生学会了 Win32 GUI 编程,刚好看到这个问题,顺手就邀请他回答了.并非是给他布置总结作业,仅仅是希望能从他这里得到第

《Qt on Android核心编程》目录

有朋友想看看<Qt on Android核心编程>的目录,So-- 目录 <Qt on Android核心编程>目录,截了10张图才弄好,都在下面了. 内容说明 本书内容基于第一个正式支持 Qt on Android 的 Qt SDK 版本,5.2.0 ,写作过程中 Qt 5.3.0 发布,我调整了部分内容,对有变化的部分作了对应介绍. 从目录可以看出,<Qt on Android核心编程>是从 Qt 的核心概念--元对象系统--讲起的,涵盖了信号与槽.事件.多线程.网