查找指定目录下所有TXT文件的代码

xzhxjpu 2005-11-22 09:55:04
//quanju mulu;
#include <string.h>
#include <stdio.h>
#define _ALPHA_
#include <windef.h>
#include <winbase.h>
//kernel32.lib
int res=0;
FILE* FP;

void func(char* dir)
{
WIN32_FIND_DATA wfd;

char dirWork[MAX_PATH];
strcpy(dirWork,dir);
strcat(dirWork,"*");
/* if(strlen(dirWork)>MAX_PATH-1)
{
puts(dirWork);
return;
}*/


HANDLE hFirFile=::FindFirstFile(dirWork,&wfd);
/* if(hFirFile==INVALID_HANDLE_VALUE)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,0,NULL
);
printf("%s",lpMsgBuf);
}
*/
do
{
if( !strcmp(wfd.cFileName,".")||!strcmp(wfd.cFileName,"..") )
continue;
else if( wfd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
{
char subdir[MAX_PATH];
strcpy(subdir,dir);
strcat(subdir,wfd.cFileName);
strcat(subdir,"\\");
func(subdir);
}
else
{
if( strstr(wfd.cFileName,".txt") )
{
res++;
SaveFileName(wfd.cFileName);
}
}
}while( ::FindNextFile(hFirFile,&wfd) );
}

void SaveFileName(char* s)
{
fprintf(FP,"%s\n",s);
}

void main()
{
FP=fopen("C:\\Documents and Settings\\xu\\桌面\\filenames.txt","w");

char* dir="C:\\Program Files\\Common Files\\";
func(dir);
printf("res=%d\n",res);

fclose(FP);
}

这段代码初看起来是正确的,您知道错在哪里吗?(用本程序不能搜索到所有txt文件,比如有windows的搜索工具能搜到9个,而此程序只能搜到5个)
...全文
288 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Snow_Ice11111 2005-12-05
  • 打赏
  • 举报
回复
wfd.dwFileAttributes 的几种取值哪位大哥能解释一下吗
--------------------------------------------------------------------------------------
MSDN上面有详细的说明的,自己看一下吧,呵呵,我偷个懒:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/win32_find_data_str.asp
xzhxjpu 2005-12-04
  • 打赏
  • 举报
回复
Snow_Ice11111是对的,非常感谢
再问一个,wfd.dwFileAttributes 的几种取值哪位大哥能解释一下吗,非常感谢!
xzhxjpu 2005-12-04
  • 打赏
  • 举报
回复
当然是请教原因了,呵呵
Tiders 2005-12-04
  • 打赏
  • 举报
回复
我有一段代码就是查找txt文件的,与你这不一样。
想要的话,回个话就行了,我贴出来
ggw 2005-12-04
  • 打赏
  • 举报
回复
::FindNextFile()要先执行一次。
Snow_Ice11111 2005-12-04
  • 打赏
  • 举报
回复
哎呀,不小心粘贴错了,应该是:
if( strstr(wfd.cFileName,".txt") || strstr(wfd.cFileName,".TXT"))
Snow_Ice11111 2005-12-04
  • 打赏
  • 举报
回复
呵呵,很简单,你的程序把所有后缀名为“.TXT”的文件都给漏了。
把下面这行:
if( strstr(wfd.cFileName,".txt") )
改成:
if( !strcmp(wfd.cFileName,".")||!strcmp(wfd.cFileName,"..") )
就行了。^_^
Snow_Ice11111 2005-11-23
  • 打赏
  • 举报
回复
^_^
楼主在问大家原因,还是在考大家?

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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