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

使用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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值