递归函数最适用的场合莫过于用来实现文件检索了。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-10-14 13:24:34