`
ssun125
  • 浏览: 41210 次
文章分类
社区版块
存档分类
最新评论

Windows下C语言查找文件例子

阅读更多

Windows下C语言查找文件例子

// 2_4.cpp : Defines the entry point for the console application.
//
//========================================================================= 
// 作者   : 欧阳文光
// 邮箱   : ssun125@163.com	
// 博客   : http://blog.csdn.net/ssun125
// 描述   : c语言文件查找
// 使用   : cmd下search.exe 目录 文件(可以用通配符*、?)(如:search.exe E: *.java)
// 日期   : 2013年01月25日
//=========================================================================

#include "stdafx.h"
#include <STDIO.H>
#include <MALLOC.H>
#include <STRING.H>
#include <windows.h>

//使用链表保存每个找到的文件夹
typedef struct DirList{
	char name[256];
	DirList * next;
} *LpDirList;

DirList * first, * last; 

//往链表中添加节点
void add(char * name)
{
	DirList * newDir = (LpDirList)malloc(sizeof(DirList));
	strcpy(newDir->name, name);
	newDir->next = NULL;
	last->next = newDir;
	last = newDir; 
}

void loopFind(char * dir, char * filename)
{
	//printf("层次遍历文件夹...\n");
	char searchName[256] = {0};
	char nextDir[256] = {0};	
	strcpy(searchName, dir);
	strcat(searchName, "\\**");
	//保存找到的文件或文件夹的信息的结构体
	WIN32_FIND_DATA findData;
	HANDLE hFindFile = FindFirstFile(searchName, &findData);
	while (FindNextFile(hFindFile, &findData))
	{
		if(findData.cFileName[0] == '.') continue;
		if(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			strcpy(nextDir, dir);
			strcat(nextDir, "\\");
			strcat(nextDir, findData.cFileName);			
			add(nextDir);					
			memset(nextDir, 0x00, sizeof(nextDir));
		}		
	}
	//查找符合条件的文件,并输出
	char nextFileName[256] = {0};
	memset(searchName, 0x00, sizeof(searchName));
	strcpy(searchName, dir);
	strcat(searchName, "\\");
	strcat(searchName, filename);
	hFindFile = FindFirstFile(searchName, &findData);
	while (FindNextFile(hFindFile, &findData))
	{
		strcpy(nextFileName, dir);
		strcat(nextFileName, "\\");
		strcat(nextFileName, findData.cFileName);
		printf("%s\n", nextFileName);							
	}

} 

void search(char * dir, char * filename)
{
	printf("开始搜索...\n");
	first = (LpDirList)malloc(sizeof(DirList));
	strcpy(first->name, dir);
	first->next = NULL;
	last = first;
	while (first != NULL)
	{
		loopFind(first->name, filename);
		first = first->next;
	}
}

int main(int argc, char* argv[])
{
	if(argv[1]==NULL || argv[2]==NULL)
	{ 
		printf("请输入目录或文件!\n");
		return 0;
	}
	search(argv[1], argv[2]);
	return 0;
}

结果截图:



分享到:
评论

相关推荐

    如何编写批处理文件批处理文件批处理文件

    在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们...

    C语言编程要点

    4.8. 怎样列出某个目录下的文件? 62 4.9. 怎样列出一个文件的日期和时间? 63 4.10. 怎样对某个目录下的文件名进行排序? 66 4.11. 怎样判断一个文件的属性? 67 4.12. 怎样查看PATH环境变量? 69 4.13. 怎样打开一个...

    windows 程序设计中文版

    2.1.5 Unicode的解救方案 2.2 宽字符和c语言 2.2.1 char数据类型 2.2.2 更宽的字符 2.2.3 宽字符库函数 2.2.4 维护一个源代码文件 2.3 宽字符和Windows 2.3.1 Windows头文件的类型 2.3.2 Windows函数调用 2.3.3 ...

    C 语言编程常见问题解答.chm

    4.8 怎样列出某个目录下的文件? 4.9 怎样列出—个文件的日期和时间? 4.10 怎样对某个目录下的文件名进行排序? 4.1l 怎样判断一个文件的属性? 4.12 怎样查看PATH环境变量? 4.13 怎样打开一个同时能被...

    VC6插件系列

    在它的帮助下,您可快速创建标头文件信息注解,文件中模块注解, C++处理方式,以及C语言功能与历史校正功能注解,等等。 String watch Microsoft Visual Studio add-in 功能:调试时查看字符串的。 Tabbar插件 ...

    代码语法错误分析工具pclint8.0

    和前面第一步中的方法基本一样,不过这里我们需要用到unix中的find等命令来查找当前目录下的C和C++文件,然后再将它们送给lint程序处理,所以得先从http://www.weihenstephan.de/~syring/win32/UnxUtils.zip下载...

    自己写的dll的简介

    可执行文件的运行速度:前者快(直接在EXE模块的内存中查找符号),后者慢(需要在DLL模块的内存中查找,在另一个模块的内存中查找自然较慢) 可共享性:前者不可共享,也就是说如果两个EXE使用了同一个静态库,那么...

    Tcl_TK编程权威指南pdf

    命令查找 嵌套名字空间 过程的进口与输出 回调与名字空间 内省(introspection) namespace命令 转换现有的软件包以使用名字空间 [incrtcl]对象系统 注意事项 第15章 国际化(internationalization) 字符集...

    RED HAT LINUX 6大全

    本书内容翔实、涉及领域广泛,并且提供了详细的例子和大量的参考资料(包括书籍、电子文档和Internet站点),是一本学习、使用和管理Linux不可多得的好书。 目 录 译者序 前言 第一部分 Red Hat Linux的介绍与安装 ...

    Dos命令大全

    下一个文件之前,每份文件都已被打开、读取并经过处理。 处理包括读取文件,将其分成一行行的文字,然后将每行 解析成零或更多的符号。然后用已找到的符号字符串变量值 调用 For 循环。以默认方式,/F 通过每个文件...

    grub4dos-V0.4.6a-2017-02-04更新

    执行时可以不用输入扩展名,比如输入test如果当前路径下有一个test.g4b就会自动使用。 2013-10-17 1.修改代码支持新版HOTKEY。 2013-07-10 1.insmod现在支持长文件名(以前最多11个字符,现在没有限制). 2....

    LINGO软件的学习

    当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

     通过提示及配置文件等来控制执行计划;  在程序中优化查询而无需改动代码。  作为Oracle SQL经典著作之一,本书为SQL开发人员指明了前行的方向,赋予了他们不断开拓的动力。 作者简介  KAREN MORTON 研究...

    C++MFC教程

    而且C++本身所具备的超越C语言的特性都可以使开发者编写出更易用,更灵活的代码。 在MFC中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义将消息分派到不同的成员函数进行处理。下面简单...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

    华为编程开发规范与案例

    C语言中最大的特色就是指针。指针的使用具有很强的技巧性和灵活性,但同时也带来了很大的危险性。在XXX的代码中有如下一端对指针的灵活使用: ... ... _UC *puc_card_config_tab; ... ... Get_Config_Table( ...

Global site tag (gtag.js) - Google Analytics