递归遍历目录中的文件(包括子文件夹里的文件)的一个问题

小班得瑞 2014-02-16 12:23:46
从网上down的一个代码,代码在公司,没法带出来,但是大致思路就是用了两个函数
_findfirst和_findnext。比方说我现在要遍历一个目录下所有文件夹里的.jpg文件,
伪代码如下:

void dirSearch( const char * file_name )
{
_findfirst( &handle, &file_info );
if( -1 == handle )
{
printf( "....\n" );
return 0;
}

else
{
if( strcmp( file_info.name, "." ) && strcmp( file_info.name, ".." ) )
{
...
dirSearch( ... )
}

// 这里就是找到了完整图片的路径,但是由于是递归遍历,所以我没想到办法
// 怎么把这些图片的路径在接口外部传出来,只能在这个接口里进行操作,
// 比如加载显示图片
// 我现在想做的就是如何能在接口外面操作文件夹里的每一张图片
else
{

}
}
}

问题的描述就在注释的地方,不知道大家有没有看懂我说的,没有的话,我再跟帖仔细说一下.所以,请大家帮我出出主意,谢谢了~
...全文
292 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
navy007hyj 2014-02-17
  • 打赏
  • 举报
回复
//增加一个参数, 可以用CStringList吗? void dirSearch( const char * file_name,CStringList &NameList ) { _findfirst( &handle, &file_info ); if( -1 == handle ) { printf( "....\n" ); return 0; } else { if( strcmp( file_info.name, "." ) && strcmp( file_info.name, ".." ) ) { ... dirSearch( ... ) } // 这里就是找到了完整图片的路径,但是由于是递归遍历,所以我没想到办法 // 怎么把这些图片的路径在接口外部传出来,只能在这个接口里进行操作, // 比如加载显示图片 // 我现在想做的就是如何能在接口外面操作文件夹里的每一张图片 else { NameList->AddTail(file_info.name); } } }
vipcxj 2014-02-17
  • 打赏
  • 举报
回复
用容器,妥妥滴,最灵活。除此之外,你可以传入一个function指针,或者一个functor,这个或许看起来貌似比较高端大气上档次~
zhuobattle 2014-02-17
  • 打赏
  • 举报
回复
有一个vector把结果保存起来,做为参数传出来
赵4老师 2014-02-17
  • 打赏
  • 举报
回复
引用 4 楼 a130098300 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
忘了说了,是基于Windows的...[/quote] 我说的就是windows,如果是linux,就得用ls命令而不是dir命令了。
richyhuang 2014-02-16
  • 打赏
  • 举报
回复
我看楼主可以把它放到一个容器里面去吧, 就可以等这个函数结束了以后再处理
赵4老师 2014-02-16
  • 打赏
  • 举报
回复
赵4老师 2014-02-16
  • 打赏
  • 举报
回复
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
小班得瑞 2014-02-16
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
忘了说了,是基于Windows的...

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧