码迷,mamicode.com
首页 > Windows程序 > 详细

Windows下实现文件检索

时间:2015-05-14 12:15:28      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:windows   递归   文件检索   c   c++   

递归函数最适用的场合莫过于用来实现文件检索了。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是一样的,只不过所有的操作对象都变成了宽字符。

Windows下实现文件检索

标签:windows   递归   文件检索   c   c++   

原文地址:http://blog.csdn.net/kyt511/article/details/45717003

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!