MFC如何遍历一个文件夹下的所有文件夹(不是文件,是文件夹)

MFC如何遍历一个文件夹下的所有文件夹(不是文件,是文件夹),第1张

用下面的

程序段

可以实现你要求的功能

CFileFind

ff

CString

strDir=

"d:\\Program

Files\\*.*"

BOOL

res

=

ff.FindFile(strDir)

while(res)

{

res

=

ff.

FindNextFile

if(ff.IsDirectory()

&&

(!ff.IsDots()))()//庆高遍历子目录,剔除".0”和".."两唯燃个

{

CString

strFile

=

ff.

GetFileName

()

//

在这里写需要的代码

}

}

ff.Close()

//

不要指差虚忘记关闭

若满意请及时采纳,谢谢

RefreshDataTemp(strPath)} /差拍/递归调用

这里你也写了,是递归调碰乎用,那么也就是子目录的统计,是在另一个(同名)函数调用中完成的,而size和Size都是局部笑庆悉变量,不会传递到上一层函数调用。

解决方法:Size 作为返值或全局变量,tr的三行语句放在这个函数之外,不参与递归。

把以下代码放到Win32控喊山制台运行,亲测可用:

#include <windows.h>

#define FILEILTER "*.*" //查找条件,例如查找羡枯.exe格式的那么就用*.exe,当然也可以直接用setup.exe

#include "iostream.h"

#include "stdio.h"

BOOL IsRoot(LPCTSTR lpszPath)

{

TCHAR szRoot[4]

wsprintf(szRoot, "%c:\\", lpszPath[0])

return (lstrcmp(szRoot, lpszPath) == 0)

}

void FindInAll(LPCTSTR lpszPath)

{

TCHAR szFind[MAX_PATH]

lstrcpy(szFind, lpszPath)

if (!IsRoot(szFind))

lstrcat(szFind, "\\")

lstrcat(szFind, FILEILTER)// 找所有文件

WIN32_FIND_DATA wfd

HANDLE hFind = FindFirstFile(szFind, &wfd)

if (hFind == INVALID_HANDLE_VALUE) //兄渗洞 如果没有找到或查找失败

return

do

{

if (wfd.cFileName[0] == '.')

continue// 过滤这两个目录

if (wfd.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)

{

TCHAR szFile[MAX_PATH]

if (IsRoot(lpszPath))

wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName)

else

{

wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName)

FindInAll(szFile)// 如果找到的是目录,则进入此目录进行递归

}

}

else

{

TCHAR szFile[MAX_PATH]

if (IsRoot(lpszPath))

{

wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName)

}

else

{

wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName)

printf("%s\n",szFile)

}

// 对文件进行 *** 作

}

} while (FindNextFile(hFind, &wfd))

FindClose(hFind)// 关闭查找句柄

}

int main(int argc, char* argv[])

{

FindInAll("E:") //这里设置目录为E:,请根据需要更改

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12279676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存