天天看點

VS周遊windows檔案夾的代碼

有點麻煩:

#include <iostream>
#include "windows.h"
#include <string.h>
#include <Strsafe.h>
 
using namespace std;
 
//傳入要周遊的檔案夾路徑,并周遊相應檔案夾
void processPath(const wchar_t Dir)    
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind=INVALID_HANDLE_VALUE;
 
    wchar_t DirSpec[MAX_PATH];
    StringCchCopy(DirSpec,MAX_PATH,Dir);
    StringCchCat(DirSpec,MAX_PATH,TEXT("\\*"));
 
    hFind=FindFirstFile(DirSpec,&FindFileData);
 
    if (hFind==INVALID_HANDLE_VALUE)
    {
        FindClose(hFind); 
        return;  
    }
 
    while (FindNextFile(hFind,&FindFileData) != 0)
    {
        //檔案,直接處理
        if((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) ==0)
        {
           //processFile()
        }
 
        //特殊目錄,不處理。
        if (   wcscmp(FindFileData.cFileName,L"." )==0
            || wcscmp(FindFileData.cFileName,L"..")==0)
        {
             continue;
        }
        //目錄,遞歸處理
        wchar_t DirAdd[MAX_PATH];
        StringCchCopy(DirAdd,MAX_PATH,Dir);
        StringCchCat(DirAdd,MAX_PATH,TEXT("\\"));
        StringCchCat(DirAdd,MAX_PATH,FindFileData.cFileName);
        processPath(DirAdd);
    }
    FindClose(hFind);
}
 
int _tmain( int argc, wchar_t *argv[ ], wchar_t *envp[ ] )
{
    locale loc( "chs" );                //支援中文輸出,否則wchar可能無法輸出值為中文的變量
    wcout.imbue( loc );
    
 
    processPath(L"D:\\Test");         //周遊指定的檔案夾,此處檔案路徑可按具體情況修改
    system("pause");
    return 0;
}      

有的朋友問,如果要使用char怎麼辦?

這個也簡單, FindFirstFileA(),在看看參數差異。