给100分
我现在分太多了

解决方案 »

  1.   

    void CSearchFileDlg::FindFilesInDirectory(const CString directory)
    {
    WIN32_FIND_DATA filedata;
    HANDLE filehandle;
    MSG msg;
    CString st2;
    m_iCounter=0;
    int i=0; filehandle=FindFirstFile(directory+m_strFileName,&filedata); if(filehandle!=INVALID_HANDLE_VALUE)
    {
    do
    {
    SHFILEINFO stFileInfo;

    SHGetFileInfo(directory+filedata.cFileName,0,&stFileInfo,sizeof(stFileInfo),SHGFI_ICON);
    HICON hIcon;
    hIcon=stFileInfo.hIcon;
    m_image.Add(hIcon);
    m_nItem++; m_StringListItem.AddTail(filedata.cFileName);
    m_StringList.AddTail(directory+filedata.cFileName); if(filedata.nFileSizeHigh==0)
    {
    CString m_strSize;
    m_strSize.Format("%d%s",(filedata.nFileSizeLow+1023)/1024," K");
    m_StringListS.AddTail(m_strSize);
    }
    else
    {
    double filesize=(MAXDWORD* filedata.nFileSizeHigh)+filedata.nFileSizeLow;
    CString m_strSize;
    m_strSize.Format("%d%s",filesize/1024.0," K");
    m_StringListS.AddTail(m_strSize);
    } nCounter2++; char szFileTime[64];
    FILETIME        strFileTime;
    SYSTEMTIME      strSysTime;
    FileTimeToLocalFileTime( &filedata.ftCreationTime, &strFileTime );
    FileTimeToSystemTime( &strFileTime, &strSysTime );
    sprintf( szFileTime,"%4d/%2d/%2d %2d:%02d:%02d",
    strSysTime.wYear, strSysTime.wMonth,
    strSysTime.wDay, strSysTime.wHour,
    strSysTime.wMinute, strSysTime.wSecond );
    m_StringListT.AddTail(szFileTime); }while(FindNextFile(filehandle,&filedata));
    FindClose(filehandle); }
    filehandle=FindFirstFile(directory+"*.*",&filedata);
    if(filehandle!=INVALID_HANDLE_VALUE)
    {
    do
    {
    if((filedata.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0
    &&CString(filedata.cFileName)!="."
    &&CString(filedata.cFileName)!="..")
    {

    FindFilesInDirectory(directory+filedata.cFileName+"\\");
    }
    if (::PeekMessage(&msg, m_hWnd, WM_KEYFIRST,WM_KEYLAST, PM_REMOVE)) 
    {
    if(msg.message == WM_KEYDOWN && msg.wParam == VK_ESCAPE)
    break;
    } }while(FindNextFile(filehandle,&filedata));
    FindClose(filehandle);
    } return;}
      

  2.   

    // ========================================================================================== //
    // 函数:FindFile()
    // 说明:在指定目录中查找指定文件
    // ========================================================================================== //BOOL SearchFile(char *filename)
    {
    char strPath[10]="0"; // 文件路径
    char strFile[10]="0"; // 文件名
    char strTemp[10]="0";
    unsigned int PathLay = 0;
    unsigned int strLen = 0;
    unsigned int i; long Handle;
    struct _finddata_t filestruct; // 将路径和文件名分开
    strLen = strlen(filename);
    for(i=strLen-1;i>=0;i--)
    {
    if(filename[i]=='\\')
    break;
    strTemp[strLen-i-1]=filename[i];
    }
    strTemp[strLen-i]='\0'; strLen = strlen(strTemp);
    for(i=0;i<strLen;i++)
    strFile[i] = strTemp[strLen-i-1];
    strFile[i]='\0'; for(i=0;i<(strlen(filename)-strlen(strFile)-1);i++)
    {
    strPath[i]=filename[i];
    if(filename[i]=='\\')
    PathLay++;
    }
    strPath[i]='\0';
    PathLay++; // 进入指定目录
    _chdir(strPath); // 查找文件
    Handle=_findfirst("*",&filestruct);
    if(!strcmp(filestruct.name,strFile))
    {
    for(i=0;i<PathLay;i++)
    chdir("..");
    return TRUE;
    } while(!_findnext(Handle,&filestruct))
    if(!strcmp(filestruct.name,strFile))
    {
    for(i=0;i<PathLay;i++)
    chdir("..");
    return TRUE;
    } // 没有找到指定文件
    for(i=0;i<PathLay;i++)
    _chdir("..");
    return FALSE;
    }上面是一个查找的函数,只要稍微修改就可以满足你的要求,他支持路径。
      

  3.   

    void CMailListBuffer::EmptyDir()
    {
    CString strPath = s_szPathParam;
    strPath += FILE_DES_BMP_DIR;//常量路径,自已定义的
    CString findfile=""; CFileFind finder;
    strPath += _T("\\*.*");
    BOOL bWorking = finder.FindFile(strPath);

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

    // skip . and .. files; otherwise, we'd
    // recur infinitely!

    if (finder.IsDots())
    continue;
    findfile = finder.GetFilePath();
    ::DeleteFile(findfile);//得到文件名,删除:)
    }   finder.Close();}
      

  4.   

    上面是删除指定目录下所有文件,s_szPathParam和FILE_DES_BMP_DIR都是常量,你所要做的就是把所有的文件用一个CStringArray记录所有文件名就行了
      

  5.   

    采用递归查询子目录
    用法: 路径,扩展名(可以只查某类),是否包含子目录
    本函数计算所有文件大小
    把以下部分改改:将ff.ff_fname取到自己定义的数组之类中
     while (!done)
       {   size+=ff.ff_fsize;
     DWORD ScanFile(char *FromPath,char *FileExt,int SubDir)
    {  struct ffblk ff;
       int    done;
       DWORD  size=0;
       char   frompath[256],topath[256];
       if (SubDir)
       {   strcpy(frompath,FromPath);
           strcat(frompath,"\\*.*");
           done=findfirst(frompath,&ff,FA_DIREC);
           while (!done)
           {   if (ff.ff_name[0]=='.')
               {   done=findnext(&ff);
                   continue;
               }
               strcpy(frompath,FromPath);
               strcat(frompath,"\\");
               strcat(frompath,ff.ff_name);
               size+=ScanFile(frompath,FileExt,SubDir);
               done=findnext(&ff);
           }
       }
       strcpy(frompath,FromPath);
       strcat(frompath,"\\");
       strcat(frompath,FileExt);
       done=findfirst(frompath,&ff,FA_ARCH);
       n_copy=0;
       while (!done)
       {   size+=ff.ff_fsize;
           done=findnext(&ff);
       }
       return size;
    }