曲径通幽论坛

标题: 递归遍历目录 [打印本页]

作者: beyes    时间: 2012-2-16 15:57
标题: 递归遍历目录
下面程序使用递归遍历目录树:

[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;
}





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2