编程中有时会遇到需要把文件路径中的文件名或者路径提取出来的情况,发现了两个好用的函数记录一下。
一、提取文件名
头文件:#include <libgen.h>
**函数:**char *basename(char *path);
注:这个函数不会修改传入的 path 内容。
二、提取路径
头文件:#include <libgen.h>
**函数:**char *dirname(char *path);
注:这个函数会修改传入的 path 内容,如果不像path被改变需要重新申请一个buf传入,如果传入的是宏则会段错误。
三、提取结果示例
摘抄自:man 3 basename
四、使用示例
#include <stdio.h>
#include <libgen.h>
#include <string.h>
#include <stdlib.h>static char s_filepath[] = "/mnt/usr/file.txt";int main(int argc, char **argv)
{char *path;printf("FILE_PATH - FILE : %s\n", basename(s_filepath));printf("1 -- s_filepath = %s\n", s_filepath);path = strdup(s_filepath);printf("1 -- path = %s\n", path);printf("FILE_PATH - PATH : %s\n", dirname(path));printf("2 -- path = %s\n", path);free(path);return 0;
}
结果:
FILE_PATH - FILE : file.txt
1 -- s_filepath = /mnt/usr/file.txt
1 -- path = /mnt/usr/file.txt
FILE_PATH - PATH : /mnt/usr
2 -- path = /mnt/usr
从结果也可以看出dirname修改了传入的路径内容。