2015-04-02 2 views
-2

Здравствуйте, Мне нужна помощь в создании c-программы, которая ищет файл в каталоге. В качестве параметров потребуется имя каталога и файла и использует stat для получения атрибутов файла. Я хотел бы, чтобы на выходе отображался путь найденного файла и любые другие пути, в которых есть имя файла.Поиск файла в дереве каталогов

Я заглянул в dirent.h для доступа к каталогу, но я не слишком уверен, как правильно его использовать для поиска файла в нем.

+0

И что такое ОС? –

+0

Os - unix. – MoistyTacos

ответ

0
char *FINDME=NULL; 

int filter (const struct dirent *p) 
{ 
    int retval=0; 
    if (fnmatch(FINDME,p->d_name, 0)==0) 
    retval=1; 
    return retval; 
} 
// scandir.c 
// scan the current directory "." 
// usage ./scandir filename 
// usage ./scandir 'filename*' 
int 
main(int argc, char **argv) 
{ 
    struct dirent **namelist; 
    int n=0; 
    FINDME=(argc>1)? argv[1] : "testfilename"; 
    n = scandir(".", &namelist, filter, alphasort); 
    if (n < 0) 
    { 
     perror("scandir"); 
     exit(1); 
    } 

    while (n--) 
    { 
      printf("%s\n", namelist[n]->d_name); 
      free(namelist[n]); 
    } 
    free(namelist); 

} 

Вы должны включить fnmatch.h и dirent.h плюс обычные файлы заголовков. fnmatch() позволяет использовать «подстановочные знаки» как * для выбора имен файлов. alphasort() сортирует имена по алфавиту и является частью системы POSIX. FNDME - глобальная строка, потому что фильтр функции обратного вызова ничего не принимает указателем на прямую структуру.

+0

oh okay thank you – MoistyTacos

+0

теперь как бы я сделал это, чтобы, если я введу имя файла, которое появляется в нескольких местах, оно будет печатать каждое место, которое оно появляется? – MoistyTacos