2015-09-29 2 views
-1
DIR *dir; 
struct dirent *entry; 
if ((dir = opendir (argv[1])) != NULL) { 
    while ((entry = readdir (dir)) != NULL) { 
    if(strcmp(entry->d_name,argv[2])==0) 
     printf ("%s\n", entry->d_name); 
} 
//recursive call, can post if needed 

Я пытаюсь создать программу для поиска всех файлов/папок с определенным именем, но с моим текущим кодом. Я получаю полный путь к файлу, поэтому я не могу используйте strcmp, чтобы найти мой путь. Предположим, что argv [2] == «Программы» тогда он не найдет его, если путь «c: // Programs». Есть ли способ в C, чтобы просто получить имя каталога?Получить имя каталога без полного пути (C unix)

+0

'entry-> d_name' должно содержать только имя файла/каталога, а не полный путь. Что вы видите в этой области? – dbush

+2

Взгляните на basename, он возвращает последний элемент в пути – redobot

+0

basename был именно тем, что я искал, thx. – Prototype

ответ

1

Есть ли какой-либо способ в C, чтобы получить имя каталога?

В Linux я использую что-то вроде этого:

#include<stdio.h> 
#include<stdlib.h> 
#include<unistd.h> 
#include<linux/limits.h> 
#include<string.h> 

void *getCurrentDir(void){ 
    char *currWorkDir, *token; 
    char buffer[PATH_MAX + 1]; 
    char *directory; 
    size_t length; 

    currWorkDir = getcwd(buffer, PATH_MAX + 1); 
    token = strrchr(currWorkDir, '/'); 

    if(currWorkDir == NULL){ 
     printf("Error"); /* You decide here */ 
     exit(1); 
    } 

    if (token == NULL) { 
     printf("Error"); /* You decide here */ 
     exit(1); 
    } 

    length = strlen(token); 
    directory = malloc(length); 
    memcpy(directory, token+1, length); 

    return directory; 
} 

int main(void){ 
    char *dir = getCurrentDir(); 
    printf("The current Working Directory is: %s\n", dir); 

    free(dir); 
    return 0; 
} 

Выход:

[email protected]:~$ pwd 
/home/michi 
[email protected]:~$ ./program 
The current Working Directory is: michi 

Или что-то вроде этого:

#include<stdio.h> 
#include<stdlib.h> 
#include<unistd.h> 
#include<linux/limits.h> 
#include<string.h> 

void *getCurrentDir(char *path){ 
    char *token; 
    char *directory; 
    size_t length; 

    token = strrchr(path, '/'); 

    if (token == NULL) { 
     printf("Error"); /* You decide here */ 
     exit(1); 
    } 

    length = strlen(token); 
    directory = malloc(length); 
    memcpy(directory, token+1, length); 

    return directory; 
} 

int main(void){ 
    char *path = "/home/michi"; 
    char *dir = getCurrentDir(path); 
    printf("The current Working Directory is: %s\n", dir); 

    free(dir); 
    return 0; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^