browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

LDirScanner:非递归遍历文件夹

Posted by on 2011 年 09 月 23 日

你可以任意转载本文,但请在转载后的文章中注明作者和原始链接。
媒体约稿请联系 titilima_AT_163.com(把“_AT_”换成“@”)。

久不发码了。今天发个习作,非递归遍历文件夹。
示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <atlbase.h>
#include "DirScanner.hpp"
 
void WINAPI OnFile(PCTSTR ptzFullPath, const WIN32_FIND_DATA& wfd, LPARAM)
{
    ATLTRACE(_T("File: %s\n"), ptzFullPath);
}
 
int main(void)
{
    LDirScanner<TCHAR> ds;
    ds.DoScan(_T("d:\\temp\\"), OnFile, 0);
    return 0;
}

完整的 DirScanner.hpp 在这里

订阅本站

7 Comments

  • At 2011.09.23 17:55, cdut-boy said:

    BOOL Ignore(PCSTR pszFile)
    {
    if (0 == strcmp(pszFile, “.”))
    return TRUE;
    if (0 == strcmp(pszFile, “..”))
    return TRUE;
    return FALSE;
    }
    BOOL Ignore(PCWSTR pwzFile)
    {
    if (0 == wcscmp(pwzFile, L”.”))
    return TRUE;
    if (0 == wcscmp(pwzFile, L”..”))
    return TRUE;
    return FALSE;
    }

    这里其实比2个字节就够了,大目录会快很多.

    LZ这个架构其实还可以完善一下,在栈里判断进行广度优先还是深度优先.

    • At 2011.09.26 10:42, 李马 said:

      > 这里其实比2个字节就够了,大目录会快很多.
      ***cmp 并不会损失效率。
      > LZ这个架构其实还可以完善一下,在栈里判断进行广度优先还是深度优先.
      也这么想,不过懒得写了。

      • At 2011.09.25 22:30, likunkun said:

        STL抛异常了,怎么办…

        现在定了规范让公司开发人员全部打回阉割版C++(类C),用STL的话全用try…catch包了。因为测试压力极限情况太变态了。

        • At 2011.09.26 08:31, 李马 said:

          具体是什么异常呢?

          • At 2011.09.26 17:59, 匿名 said:

            内存不足,bad_alloc()

            • At 2011.09.26 20:07, 李马 said:

              唉。

              • At 2011.09.25 22:44, likunkun said:

                马哥这代码在外面加一层就没问题了哈,我一直在反思,严谨又适合新人的编码方式,不知道我的做法是正确还是错误

                (Required)
                (Required, will not be published)