Windows下遍历文件目录
Posted 牧秦丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows下遍历文件目录相关的知识,希望对你有一定的参考价值。
最近用到遍历文件目录,总结一下:
#include <Windows.h>
WIN32_FIND_DATA fndData;
HANDLE hFnd = INVALID_HANDLE_VALUE;
hFnd = ::FindFirstFile(_T("D:\\\\Program Files\\\\*.*"), &fndData);
if (hFnd == INVALID_HANDLE_VALUE)
return ;
while (::FindNextFile(&fndData))
CString strFileName = fndData.cFileName;
if (fndData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
// 目录
else
// 文件
if (::GetLastError() == 18)
// 目录下的文件检索完毕.
::FindClose(hFnd);
我们可以通过一个递归函数来递归遍历:
void BuildRegSystem(
const tstring& strFileSystemPath,
const tstring& strAddParPath,
CSysMgr& mgr
)
tstring strFsPath = strFileSystemPath;
tstring strEnumPath = strFileSystemPath;
tstring strAddNewPath = strAddParPath;
if (*strFsPath.rbegin() != _T('\\\\'))
strFsPath += _T('\\\\');
if (*strAddNewPath.rbegin() != _T('\\\\'))
strAddNewPath += _T('\\\\');
strEnumPath = strFsPath + _T("*.*");
WIN32_FIND_DATA fndFile;
HANDLE hFnd = ::FindFirstFile(strEnumPath.c_str(), &fndFile);
if (hFnd == INVALID_HANDLE_VALUE)
return ;
while (::FindNextFile(hFnd, &fndFile))
tstring strFileName = fndFile.cFileName;
if (strFileName == _T(".."))
// 如果是上级目录,则不管.
continue;
if (fndFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
// 如果是文件夹,则进行递归.
mgr.CreateRegDirectory(strAddNewPath + strFileName);
BuildRegSystem(
strFsPath + strFileName,
strAddNewPath + strFileName,
regSystem
);
else
mgr.InsertEntry(strAddParPath, strFileName);
::FindClose(hFnd);
void Test()
CSysMgr mgr;
BuildRegSystem(_T("D:\\\\Program Files\\\\11game"), _T("\\\\"), mgr);
// ...
// ...
没有任何复杂的操作,只为备忘。
以上是关于Windows下遍历文件目录的主要内容,如果未能解决你的问题,请参考以下文章