一段文件遍历代码中不明白的地方请教!

cnbugs 2011-07-07 01:22:35

void SearchFile(char * filepath)
{
WIN32_FIND_DATA finddata;
HANDLE findHandle;
char filename[MAX_PATH -1];
wsprintf(filename,"%s%s",filepath,"//*");
findHandle = FindFirstFile(filename,&finddata);

while (FindNextFile(findHandle,&finddata) !=0 )
{
if (finddata.cFileName[0] != '.')
{
if ((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)== FILE_ATTRIBUTE_DIRECTORY )
{
char subpath[MAX_PATH-1];
wsprintf(subpath,"%s%s//",filepath,finddata.cFileName);
SearchFile(subpath);
}
else
printf("%s\n",finddata.cFileName);
}
}
FindClose(findHandle);
}


wsprintf(filename,"%s%s",filepath,"//*");
假如给的路径是 d:\test ,转换后成了 d:\test//* ,为什么要这样做?
...全文
86 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
RLib 2011-07-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cnbugs 的回复:]
FindFirstFile("d:\\test\\*", &finddata) 这样才对啊,要 \\
但是转换后是:
FindFirstFile("d:\test\\*", &finddata) ,只有一个 \ ,为什么结果也正常?
[/Quote]

\是需要转义的,所以用\\
5t4rk 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 rrrfff 的回复:]
把d:\test//*看成d:\test\*就好理解了。实际上它们都是允许的。(API自动转换?)
而*是通配符,表示任何文件。
[/Quote]
++
cnbugs 2011-07-07
  • 打赏
  • 举报
回复
FindFirstFile("d:\\test\\*", &finddata) 这样才对啊,要 \\
但是转换后是:
FindFirstFile("d:\test\\*", &finddata) ,只有一个 \ ,为什么结果也正常?
RLib 2011-07-07
  • 打赏
  • 举报
回复
把d:\test//*看成d:\test\*就好理解了。实际上它们都是允许的。(API自动转换?)
而*是通配符,表示任何文件。
cnbugs 2011-07-07
  • 打赏
  • 举报
回复
可以遍历子目录内文件。

另外还有一处不明白,请教点下!

SearchFile("d:\\test\\");

运行结果:
d:\test\\*
d:\test\111\
d:\test\111\\*
111.txt
d:\test\222\
d:\test\222\\*
readme.txt


看上去很怪啊!不应该是 d:\\test\\*吗?如:FindFirstFile("d:\\test\\*", &finddata)


cnbugs 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iwome 的回复:]
貌似是笔误 \\ 就好理解了

确实这个代码是运行正常的代码么.
[/Quote]

代码可以遍历文件,但有子目录就不行了。不知道要怎么改。
iwome 2011-07-07
  • 打赏
  • 举报
回复

貌似是笔误 \\ 就好理解了

确实这个代码是运行正常的代码么.

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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