windows编程之文件夹遍历

利用windows的API,FindFirstFile和FileNextFile,采用递归遍历指定文件夹中的所有文件及文件夹,第一次windows编程,代码写的很臃肿难看,请大家多多包涵!

<pre name="code" class="cpp">#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};
				strcpy(dir , Str);
				strcat(dir , "/");
				strcat(dir , 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秒

windows编程之文件夹遍历,布布扣,bubuko.com

时间: 2024-08-09 06:22:09

windows编程之文件夹遍历的相关文章

linux下的c语言编程删除文件夹

刚刚在学习开始做新项目的时候,学长布置了一项任务,就是在给定一个目录下,要将这个目录下一个星期之前的目录包括里面的文件全部删除,只保留这一个星期内的.百度了好久的资料,终于完成,记录一下防止忘记.(注:文件夹名称默认为日期格式,如20140716) #include<dirent.h> #include<sys/types.h> #include<string.h> #include<stdlib.h> #include<unistd.h> #i

windows下文件夹遍历

文件夹的操作,是我们在编程中经常遇到的问题,在linux上和windows上经常会有文件夹操作的需求,典型的例子如遍历文件夹中的所有文件,在这两个系统中文件夹操作所提供的API也有所不同. 最近我老婆向我提了一个需求,便于她管理文件夹:开发一个exe,将exe放入一个目录下,点击该exe,生成这个目录下所有文件的清单,文件夹用"[]"括起来,同时根据文件级别进行缩进. 这个需求实现起来不难,用到的知识就是文件夹的遍历,在windows上使用的是windows相关的API函数,主要有用到

python实现文件夹遍历

python 中os.path模块用于操作文件或文件夹 os.path.exists(path) 判断文件路径是否存在 dir = "c:\windows"if os.path.exists(dir) : print "dir exists"else : print "no exists" os.path.isfile(path) 判断path是否是文件 dir = "c:\windows\system32\cmd.exe"i

PoEdu - Windows阶段班 【Po学校】Windows编程 Lesson004_003-2 文件操作

001_函数的不同版本 HANDLE : CreateFile()函数返回一个内核对象的句柄 WINAPI : 一种调用约定,调用方式. _In_ 与 _In_opt_ : 本身没有意义,一个说明宏,来标明这个参数的性质. _In_ 说明此参数是"输入型"参数 _In_Opt_ 说明此参数是"输入指针型"参数 _Out_ 说明此参数是"输出型"参数 输出参数要保障:输出型参数,具有可操作的空间 VS2015中,CreateFile()是一个宏:W

lua使用io.open跨平台文件夹遍历匹配查找

-- Desc :实现在LUA_PATH中的lua文件中遍历寻找没用到PNG_PATH路径下的png图片,并将其打印出来. -- Date :12:49:28 2014-09-04 1 print("Lua Script Start") 2 3 function getFileName( path ) 4 len = string.len(PNG_PATH); 5 return string.sub(path, len+2) --  remove "/" 6 end

文件读写&amp;文件夹遍历

 文件读写 读文件(行) private void readFile(File file) throws IOException { FileInputStream stream = null; stream = new FileInputStream(file); DataInputStream sysin = new DataInputStream(stream); String line = null; while ((line = sysin.readLine()) != null)

linux cifs自动挂载远程windows硬盘或文件夹

第一步: 在要挂载的windows系统中找到需要挂载的硬盘或者文件夹,把它设置为共享 第二步: 在linux系统/mnt目录下创建一个文件夹 第三步: 测试挂载 #mkdir /mnt/share #mount -t cifs -o username=administrator,password=123456 192.168.1.12:Download /mnt/share 第四步: 设置自动挂载 vi /etc/fstab //192.168.1.12:Download  /mnt/share

Windows 桌面和文件夹的右键-&gt;打开命令行窗口

1.先按下shift,再点鼠标右键运行CMD,(不是管理员权限) 上图是我已经加了右键的,并且 系统设置了  ps代替cmd,所以是“在此处打开 Powershell 窗口 2.不用shift,在桌面和文件夹中的空白处,点击右键出现的菜单加上“以管理员权限运行命令行”,而不是单单在文件夹图标上. 把下面的代码保存为一个 `.reg` 文件然后 打开允许运行和导入注册表就OK了. Windows Registry Editor Version 5.00 #文件夹上的右键 [HKEY_CLASSES

Windows下.svn文件夹的最简易删除方法(附linux)

如果想删除Windows下的.svn文件夹,通过手动删除的渠道是最麻烦的,因为每个文件夹下面都存在这样的文件.下面是一个好办法:建立一个文本文件,取名为kill-svn-folders.reg(扩展名由txt改为reg),内容如下: 复制代码 代码如下: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN] @="Delete SVN Folders&qu