获取没有完整路径的目录名称(C unix)
Get directory name without full path (C unix)
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
我正在尝试编写一个程序来查找所有具有特定名称的 files/folders,但是使用我当前的代码我得到了完整的文件路径,所以我不能真正使用 strcmp 来查找我的路径。假设 argv[2]=="Programs" 那么如果路径是 "c://Programs" 它将找不到它。在 C 中有什么方法可以只获取目录的名称?
Is there any way in C to just get the name of the directory?
在 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;
}
输出:
michi@michi-laptop:~$ pwd
/home/michi
michi@michi-laptop:~$ ./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;
}
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
我正在尝试编写一个程序来查找所有具有特定名称的 files/folders,但是使用我当前的代码我得到了完整的文件路径,所以我不能真正使用 strcmp 来查找我的路径。假设 argv[2]=="Programs" 那么如果路径是 "c://Programs" 它将找不到它。在 C 中有什么方法可以只获取目录的名称?
Is there any way in C to just get the name of the directory?
在 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;
}
输出:
michi@michi-laptop:~$ pwd /home/michi
michi@michi-laptop:~$ ./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;
}