Это мой код:
#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
не распознает подстановочные знаки. - person MikeCAT   schedule 05.10.2020C:\Users\Admin Local\Documents\..\..\..\..\..\..\..\..\..
и так далее? - person MikeCAT   schedule 05.10.2020"."
, код выполняет двеFindNextFile
итерации подряд, что приводит к пропуску".."
. - person dxiv   schedule 05.10.2020