1、用CFileFind好像也要遍历文件,如何避免遍历文件?
2、哪种方式最快?

解决方案 »

  1.   

    1、用IShellFolder::EnumObjects(*,SHCONTF_FOLDERS,*)好像可以跳过文件,不过也许这个工作是系统做了(其实还是判断了检索对象是否为文件夹?)。没用过这个,不熟悉
    2、还有别的方法吗,哪种方式快呢
      

  2.   

    如何得到指定文件夹(比如C:\Temp\Ceshi)对应的LPITEMIDLIST,不会非得从桌面开始枚举吧?如果是这样,IShellFolder::EnumObjects方法不行啊
      

  3.   

    SHGetDesktopFolder是必要的,但不一定从桌面开始枚举,可以直接转入工作目录,如
    hr = lpDesktop->ParseDisplayName(NULL, NULL, L"c:\\Temp\\Ceshi", NULL, &pidlWorkDir, NULL);
        if(FAILED(hr))return FALSE;
    hr = lpDesktop->BindToObject(pidlWorkDir, NULL, IID_IShellFolder, (LPVOID*)&lpWorkDir);
      

  4.   

    WIN32API:
    FindFirstFile和FindNextFile,使用FILE_ATTRIBUTE_DIRECTORY
    不知道是不是最快的
      

  5.   

    看来IShellFolder::EnumObjects(SHCONTF_FOLDERS)也遍历了文件,只是这个工作是由系统函数完成的。对吧?