hur.cn - 华软网

 热门搜索

我想用以下代码遍历文件夹和文件,但是希望深度超过5层的文件夹不进行遍历,该添加什么代码呢?

  作者:未知    来源:网络    更新时间:2011/9/21
void FindFileInDir(char* lpPath)
{
char szFind[MAX_PATH];
    WIN32_FIND_DATA FindFileData;

    strcpy(szFind,lpPath);
    strcat(szFind,"\\*.*");

    HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
    if(INVALID_HANDLE_VALUE == hFind)    return;
    
    while(TRUE)
    {
        if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if(FindFileData.cFileName[0]!='.')
            {
                strcpy(szFind,lpPath);
                strcat(szFind,"\\");
                strcat(szFind,FindFileData.cFileName);
                FindFileInDir(szFind);
            }
        }
        else
        {
            cout << FindFileData.cFileName;
        }
        if(!FindNextFile(hFind,&FindFileData))    break;
    }
    FindClose(hFind);
}
---华软 网友回答---
FindFileInDir(char* lpPath)
这个函数里添加一个int型引用或指针的参数
每次遍历是都加一,当判断到五时退出遍历就可以了
---华软网友回复---
以下是我写的,你可以在函数最后添加参数一个int型指针
参数分别为目录、过滤条件、是否递归、存放文件名的列表,你在加一个int型指针就可以了
bool RecursionAllFiles(char * szDir,char * szFilter,bool IsRecurision,list<string>& lsFile){

long lFile;
_finddata_t fileInfo;
_findfirst(szDir,&fileInfo);
if ((lFile = _findfirst(szDir,&fileInfo)) != -1)
{
do{
if (memcmp(fileInfo.name,".",1) != 0 && memcmp(fileInfo.name,"..",2) != 0)
{
if (IsRecurision && (fileInfo.attrib & _A_SUBDIR))
{
RecursionAllFiles(strcat(szDir,fileInfo.name),szFilter,IsRecurision,lsFile);
}
else
{
lsFile.push_back(fileInfo.name);
}
}
}while(_findnext(lFile,&fileInfo) == 0);
_findclose(lFile);
}
return true;
}
---华软网友回复---
添加一个参数deep,每次递归时传参数deep + 1
---华软网友回复---
void FindFileInDir(char* lpPath)改成void FindFileInDir(char* lpPath, int nDeepth)

在FindFileInDir中递归调用时,传nDeepth+1,
函数进入后的第一行代码前加入 if(nDeepth >= 5) return;

     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。