获取指定路径下的所有文件

这里获取指定路径下的所有文件用到了 WIN32_FIND_DATA

下面是WIN32_FIND_DATA的结构

typedef struct _WIN32_FIND_DATA { 
  DWORD dwFileAttributes;   //文件属性
  FILETIME ftCreationTime;  //文件创建时间
  FILETIME ftLastAccessTime; //文件最后一次访问时间
  FILETIME ftLastWriteTime; //文件最后一次修改时间
  DWORD nFileSizeHigh; //文件长度高32位
  DWORD nFileSizeLow; //文件长度低32位
  DWORD dwOID; //文件的对象标识符
  TCHAR cFileName[MAX_PATH]; //长文件名
} WIN32_FIND_DATA; 

具体实现

直接贴代码了,里面的注释写得很清楚

// strPath							指定的路径
// std::vector<CString >& vecFile	保存读出的文件
// bool bRecursion					ture为递归,也就是如果strPath路径下还有文件夹,也一并读取;false为不递归,仅读取strPath路径下的文件

void GetFile(CString strPath, std::vector<CString >& vecFile, bool bRecursion)
{
	if (strPath == L"")
		return ;

	strPath = strPath + _T("\\");

	WIN32_FIND_DATA findData;

	HANDLE hHandle = ::FindFirstFile(strPath + _T("*.*"), &findData);
	//为无效句柄则返回
	if (hHandle == INVALID_HANDLE_VALUE)
		return ;

	do
	{	//排除"."和".."           "."代表自身文件夹,".."代表上一级文件夹
		if (_tcscmp(findData.cFileName, _T(".")) && _tcscmp(findData.cFileName, _T("..")))
		{
			//如果为文件夹则根据传进来的bool值判断是否递归
			if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				if (bRecursion)
					GetFile(strPath + findData.cFileName, vecFile, bRecursion);
			}
			//为文件则直接存入容器
			else
			{
				vecFile.push_back(strPath + findData.cFileName);
			}
		}
	} while (::FindNextFile(hHandle, &findData) != FALSE);	//没有找到任何文件或文件夹则跳出循环

	::FindClose(hHandle); //关闭文件句柄
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值