Windows下实现文件检索

递归函数最适用的场合莫过于用来实现文件检索了。windows系统提供了FindFirstFile和FindNextFile两个系统调用,利用这两个函数,我们可以轻松实现windows下的文件检索。

源文件<demo.cpp>

#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>

using namespace std;

int num = 0;

void SearchFile(wstring filePath);//文件检索函数
int main()
{
    wstring path = L"C:";//设置根目录
    SearchFile(path);//检索目录
    printf("总文件个数:%d\n", num);
    system("pause");
}

/*
*检索文件函数
*@param 文件夹路径
*/
void SearchFile(wstring filePath)
{    
    //定义一个结构,用于存放系统调用返回函数
    WIN32_FIND_DATA findData = { 0 };

    //FindFirstFile函数返回一个句柄,并将产找结果存入findData中
    HANDLE handle = ::FindFirstFile((filePath+L"\\*.*").c_str(), &findData);

    //判断句柄是否有效
    if (INVALID_HANDLE_VALUE == handle)
    {
        return;
    }
    else
    {
        do
        {
            if (findData.cFileName[0] == L'.')//忽略当前目录(.)和上一级目录(..)
                continue;

            num++;//文件计数加一
            
            if (findData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)//该文件是目录文件
            {
                wstring tempFilePath = filePath + L"\\" + findData.cFileName;
                SearchFile(tempFilePath);//递归调用,检索子目录
            }
            if (findData.dwFileAttributes&FILE_ATTRIBUTE_NORMAL)//该文件是普通文件
            {
                wcout << filePath + L"\\" + findData.cFileName << endl;
            }
        } while (FindNextFile(handle, &findData));//找到当前目录下的下一个文件
    }
    ::FindClose(handle);//关闭查找句柄
}

:wstring,wcout用法和string,cout是一样的,只不过所有的操作对象都变成了宽字符。

时间: 2024-08-08 19:36:22

Windows下实现文件检索的相关文章

Windows下尝试PHP7提示丢失VCRUNTIME140.DLL的问题解决

前天PHP7.0.0正式版发布了,有一些比较好的改进,官方也说速度比php5.6快了两倍,性能上有了很大提升,并且也发布了从php5.x向php7迁移的问题,所以今后php网站迁移后能够大幅度的提升网站性能,所以为了尝鲜我也去php官网下载了7.0的版本,通过命令行进行独立的测试,下载zip包后解压出来,下载后进入目录,将php.ini-development改为php.ini其余的参数暂时不用修改,然后在当前目录下新建test.php,输入简单的代码: 1 <?php 2 echo "H

Windows下VC编译OpenDDS

OpenDDS是一个OMG组织DDS标准的C++开源实现,OpenDDS同时也提供Java支持.OpenDDS依赖ACE抽象层来提供不同平台的兼容性,同时也依赖于TAO(例如TAO的IDL编译器).当前OpenDDS有ociweb ObjectComputing维护,官方网站http://www.opendds.org/.目前OpenDDS支持的平台有Windows,Linux family,Android,VxWorks等,可用的编译器包括VC,gcc,QNX gcc等. 1. OpenDDS

Windows下的磁盘管理(二)

续Windows下的磁盘管理(一) 六.跨区卷 跨区卷是由几个位于不同磁盘的未分配空间所组成的一个逻辑卷.即用户可以将几个磁盘内的未分配空间,合并成一个跨区卷,分配一个共同的驱动器,这样可能更有效地利用空间.     用户可以选择2-32个磁盘:     每个磁盘的容量可以不相同:     不可以包括系统卷与活动卷:     系统存储数据时,是先将数据存储在其成员中的第一个磁盘内,待其空间用完后,才会用到第二个磁盘,依次类推:     跨区卷不能提高磁盘的访问效率:     跨区卷不具有容错功能

Python学习笔记(三)windows下安装theano

早就听说theano很难安装,这一次算是初步尝试,不知道会不会有其它问题. 0 参考材料 (1)win 8.1 64bit 深度学习theano 安装设置 (2)Windows下安装theano成功,但一import就报decode错是什么原因? (3)Wndows8.1 64bit环境下搭建深度学习平台之Theano安装配置 (4)deep learning学习环境Theano安装(win8+win7) 1 简单记录过程 (1)安装anaconda:Download Anaconda now!

windows下scrapy框架学习笔记—&#39;scrapy&#39; 不是内部或外部命令

最近几天在深入的学习scrapy框架,但是装完各种需要的基础包之后却发现scrapy命令在别的路径下都用不了,我一开始是把python安装在F:\Python路径下的,安装了scrapy后它默认都会安装在这个路径下,scrapy在路径F:\Python\Scripts路径下,我的scrapy命令只能在此路径下用,因此创建什么工程也都只能在此文件下. 想了一下它的工作原理:它在F:\Python\Scripts路径下,就会在Scripts文件下存在一个scrapy批处理文件,那么在DOS下想要命令

(转)Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat

刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装asyncio的时候就报错. 在Windows7x64下使用pip安装包的时候提示报错:Microsoft Visual C++ 9.0 is required  (Unable to find vcvarsall.bat) 环境:windows7 x64 ,python2.7 ,VS2012 原因:windows下使用pip安装包的时候需要机器装有vs2008,VS2012还不行,如果不想装VS2008

Windows下使用Word2vec继续词向量训练

word2vec是Google在2013年提出的一款开源工具,其是一个Deep Learning(深度学习)模型(实际上该模型层次较浅,严格上还不能算是深层模型,如果word2vec上层再套一层与具体应用相关的输出层,如Softmax,便更像是一个深层模型),它将词表征成实数值向量,采用CBOW(Continuous Bag-Of-Words Model,连续词袋模型)和Skip-Gram(Continuous Skip-GramModel)两种模型.具体原理,网上有很多. 本文是在window

VNCViewer Windows下远程连接Linux桌面

最近项目需求,需要将写的工程部署到centos6.5服务器上,但是出现了各种错误,就想着在linux下再调试代码.但是之前都是通过ssh链接远程服务器的,在ssh中肯定不能打开eclipse等集成开发工具,因此我们要在远程服务器上安装桌面及vncserver,然后在windows中用vncViewer连接. 一:服务器端(Centos6.5) 1:安装桌面: # yum groupinstall "GNOME Desktop Environment"(CentOS 5.x安装GNOME

node.js在windows下的学习笔记(2)---简单熟悉一些命令

1.打开如下的安装 2.输入node -v,显示node的版本号 3.输入node --help.显示帮助命令 4.自己用一个文本编辑器编写一下代码,保存为text.js,然后在控制台输入node.exe  text.js的路径(直接把这个js文件拖到控制台自动显示路径),按下回车键 var http = require("http"); http.createServer(function(request, response) { response.writeHead(200, {&