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是一样的,只不过所有的操作对象都变成了宽字符。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值