【发布时间】:2021-01-20 13:44:29
【问题描述】:
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <windows.h>
void filesearch(char* path,char* fname);
int main()
{
filesearch("C:\\Users\\Admin Local\\Documents","test.txt");
int choice;
char folder[80],fname[80];
printf("\nWhich directory will I search in? ");
gets(folder);
printf("\nWhat is the filename of the required file? ");
gets(fname);
filesearch(folder,fname);
}
void filesearch(char* folder,char* fname){
char path[80];
HANDLE filehandle;
WIN32_FIND_DATA ffd;
strcpy(path,folder);
strcat(path,"\\*");
// printf("%s\n",path);
filehandle=FindFirstFile(path,&ffd);
do{
if(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
if(strcmp(ffd.cFileName,".")==0){
FindNextFile(filehandle,&ffd);
continue;
}
char subpath[80];
strcpy(subpath,folder);
strcat(subpath,"\\");
strcat(subpath,ffd.cFileName);
filesearch(subpath,fname);
continue;
}
if(strcmp(ffd.cFileName,fname)==0)
printf("\n%s\\%s\n",folder,ffd.cFileName);
}while(FindNextFile(filehandle,&ffd)!=0);
FindClose(filehandle);
return;
}
当我放置一个目录时: C:\Users\Admin Local\Documents 和通配符 *.txt 什么都没发生。 程序突然停止,窗口显示错误并退出。
然而,当我输入: C:\Users\Admin Local\Documents 和文件名 test.txt 它按应有的方式输出。
我在第 10 行对该函数进行了测试调用,这样我就可以检查它是否正常工作,而不必担心用户输入和输入处理中的错误。
测试调用工作正常。
代码中是否有任何问题,或者这是防病毒问题,最重要的是,我该如何解决?
【问题讨论】:
-
strcmp无法识别通配符。 -
未测试,这个程序不会去
C:\Users\Admin Local\Documents\..\..\..\..\..\..\..\..\..之类的吗? -
@MikeCAT 实际上不是,要么靠运气,要么靠(冒险的)把戏。当遇到
"."时,代码连续运行两次FindNextFile迭代,恰好跳过".."。
标签: c windows winapi directory file-search