下面程序使用递归遍历目录树:
[C++] 纯文本查看 复制代码
#include "stdafx.h"
DWORD TraverDir (LPTSTR szPath)
{
setlocale(LC_ALL, "chs");
WIN32_FIND_DATA FindFileData;
HANDLE hListFile;
TCHAR szFilePath[MAX_PATH];
TCHAR szFullPath[MAX_PATH];
ZeroMemory(szFilePath, MAX_PATH);
ZeroMemory(szFullPath, MAX_PATH);
lstrcpy (szFilePath, szPath);
lstrcat (szFilePath, TEXT("\\*"));
hListFile = FindFirstFile (szFilePath, &FindFileData);
if (hListFile == INVALID_HANDLE_VALUE) {
_tprintf (TEXT("错误:%d"), GetLastError());
return 1;
} else {
do {
//略过 . 和 .. 目录
if (lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 ||
lstrcmp(FindFileData.cFileName, TEXT("..")) == 0) { continue; }
//构造全路径
wsprintf (szFullPath, TEXT("%s\\%s"), szPath, FindFileData.cFileName);
_tprintf (TEXT("\n%s\t"), szFullPath);
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
_tprintf (TEXT("<DIR>"));
TraverDir (szFullPath);
}
_tprintf (TEXT("\n"));
} while (FindNextFile(hListFile, &FindFileData));
}
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "chs");
if (argc == 2) {
TraverDir(argv[1]);
} else {
TCHAR szCurrentPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, szCurrentPath);
TraverDir(szCurrentPath);
}
return 0;
} |