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

这里获取指定路径下的所有文件用到了 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& 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); //关闭文件句柄
}

你可能感兴趣的:(C++,C++,文件,路径)