VC++ 遍历并且返回指定目录下的所有文件

2023-09-23 27 0

使用WIN32 API 来遍历指定目录下的所有文件并返回:

.h

#include <Windows.h>
#include <stdio.h>
#include <vector>
#include <iostream>/*
* DWORD EnumerateFileInDirectory(LPSTR szPath)
* 功能:遍历目录下的文件和子目录,将显示文件和文件夹隐藏、加密的属性
*
* 参数:LPSTR szPath,为需遍历的路径
* 参数:std::vector<std::wstring>& vFileList,为遍历的结果
*
* 返回值:0代表执行完成,1代表发送错误
*/
DWORD EnumerateFileInDirectory(LPWSTR szPath, std::vector<std::wstring>& vFileList);

 

.cpp

#include "stdafx.h"
#include "tWinFile.h"DWORD EnumerateFileInDirectory(LPWSTR szPath, std::vector<std::wstring>& vFileList)
{WIN32_FIND_DATA FindFileData;HANDLE hListFile;WCHAR szFilePath[MAX_PATH];// 构造代表子目录和文件夹路径的字符串,使用通配符"*"lstrcpyW(szFilePath, szPath);// 注释的代码可以用于查找所有以“.txt”结尾的文件// lstrcat(szFilePath, "\\*.txt");lstrcat(szFilePath, L"\\*");// 查找第一个文件/目录,获得查找句柄hListFile = FindFirstFile(szFilePath, &FindFileData);// 判断句柄if(hListFile == INVALID_HANDLE_VALUE){wprintf(L"遍历文件错误:%d\n", GetLastError());return 1;}else{do{/* 如果不想显示代表本级目录和上级目录的“.”和“..”,可以使用注释部分的代码过滤if(lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 ||lstrcmp(FindFileData.cFileName, TEXT("..")) == 0){continue;}*/// 打印文件名、目录名//printf("%ws\t\t", FindFileData.cFileName);/*// 判断文件属性,是否为加密文件或者文件夹if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_ENCRYPTED){printf("<加密> ");}// 判断文件属性,是否为隐藏文件或文件夹if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN){printf("<隐藏> ");}// 判断文件属性,是否为目录if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){printf("<DIR> ");}// 读者可根据文件属性表中的内容自行添加、判断文件属性printf("\n");*/if(lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 ||lstrcmp(FindFileData.cFileName, TEXT("..")) == 0){continue;}if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){WCHAR szNextDir[MAX_PATH] = {0};lstrcpyW(szNextDir, szPath);lstrcatW(szNextDir, L"\\");lstrcatW(szNextDir, FindFileData.cFileName);EnumerateFileInDirectory(szNextDir, vFileList);}else{std::wstring filePath;filePath.resize(MAX_PATH);lstrcpyW(&filePath[0], szPath);lstrcatW(&filePath[0], L"\\");lstrcatW(&filePath[0], FindFileData.cFileName);vFileList.push_back(filePath);}}while(FindNextFile(hListFile, &FindFileData));}return 0;
}

 

代码编程
赞赏

相关文章

基于ArcGIS的时态GIS(二)
基于ArcGIS的时态GIS(一)
RedHatLinux下安装ArcGISServer9.3.1【一】
FeatureClass范围更改
ArcGIS制图表达—突出实体目标
ArcGIS制图表达—创建天桥