同上

解决方案 »

  1.   

    FindFirstFile & FindNextFile
      

  2.   

    void CBackupPage::FindProc(char *szPath)
    {
    //查找目录下文件
    CString sName;
    WIN32_FIND_DATA pfFind;
    HANDLE hFind;
    char szFind[256];
    char szFileName[256];
    sprintf(szFind,"%s*.*",szPath);
    pfFind.dwFileAttributes &= ~FILE_ATTRIBUTE_DIRECTORY;
    hFind = FindFirstFile(szFind,&pfFind);
    while(hFind!=INVALID_HANDLE_VALUE)
    {
    if(!(pfFind.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
    {
    sprintf(szFileName,"%s%s",szPath,pfFind.cFileName);
    sName = szFileName;
    }
    if(!FindNextFile(hFind,&pfFind))
    break;
    }
    FindClose(hFind);
    //归递查找子目录下的文件。
    char szFullPath[256];
    pfFind.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
    sprintf(szFind,"%s*.",szPath);
    hFind = FindFirstFile(szFind,&pfFind);
    while(hFind!=INVALID_HANDLE_VALUE)
    {
    if(pfFind.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {
    strcpy(szFileName,pfFind.cFileName);
    if(strcmp(szFileName,".")&&strcmp(szFileName,".."))
    {
    sprintf(szFullPath,"%s%s\\",szPath,szFileName);
    FindProc(szFullPath);
    }
    }
    if(!FindNextFile(hFind,&pfFind))
    break;
    }
    FindClose(hFind);
    }
      

  3.   

    牙医的方法不错,我也来加一个:
    //如果sPath为目录,就继续检查他的是否仍然有下一级子目录; 
    //参数bInTheSameDir表示目标文件的路径是否与源文件一致。
    void CTRSRichEditorDoc::SearchDirectory(LPCTSTR Path)
    {
    CString sPath=Path;
    if(sPath.Right(1)!='\\')
    {
    sPath += "\\";
    }
    FindFiles(sPath);
    sPath+="*.*";
    CFileFind ff;
    BOOL bWorking = ff.FindFile(sPath);
    if (!bWorking) return;

    while (bWorking)
    {
    bWorking = ff.FindNextFile();
    if (ff.IsDots())
    continue;

    if (ff.IsDirectory()){
    CString str=ff.GetFilePath();
    str+='\\';
    SearchDirectory(str);
    }
    }
    }CStringArray m_arrType;可以在这个数组中加入要搜索的文件后缀类型,例如:“*.doc”、“*.rtf”
    //如果sPath为文件,就自动搜索是否符合后缀要求,符合就添加到列表中; 
    void CTRSRichEditorDoc::FindFiles(CString sPath)
    {
    CString sDestPath="";
    CString sExt;//记录后缀
    int nExtLen = 0;
    CString sFileName = "";
    int size=m_arrType.GetSize();
    for(int i=0;i<size;i++){
    CString TmpPath;
    TmpPath=sPath;
    sExt = m_arrType[i];//加上对文件类型的判断
    TmpPath+=sExt;
    sExt = sExt.Mid(1);//去掉“*”.
    nExtLen = sExt.GetLength();
    CFileFind ff;
    BOOL bWorking = ff.FindFile(TmpPath);
    if (!bWorking && i<size ) continue;
    else if(!bWorking && i>=size) return;

    while (bWorking)
    {
    bWorking = ff.FindNextFile();

    if (ff.IsDots())
    {
    continue;
    }
    if (ff.IsDirectory()){ //this is impossible.
    continue;
    }
    if (!ff.IsDirectory()) //file
    {
    sFileName = ff.GetFilePath();
    m_arrFileName.Add(sFileName);
    }
    }
    }
    }