linux下的函数dirname()和basename()使用
总览
#include <libgen.h> char *dirname(char *path); char *basename(char *path);
说明
函数以 '/' 为分隔符
dirname
获取文件的路径
没有 '/' 的时候返回的是 "."
注意: dirname 会修改 path中的数据
basename
获取文件的名称
示例:
path dirname basename "/usr/lib" "/usr" "lib" "/usr/" "/" "usr" "usr" "." "usr" "/" "/" "/" "." "." "." ".." "." ".."
代码:
#include <stdio.h> #include <stdlib.h> #include <libgen.h> #include <string.h> int main ( int argc, char *argv[] ) { char *str = "/root/workdir/haha.txt"; char buf[1024] = {0}; strncpy (buf, str, strlen(str)); //dirname 会修改buf中的值,所以需要一个缓冲区 //直接调用dirname(str), 会使程序崩溃 printf ("dirstr is:%s\n", dirname(buf)); printf ("dir buf is:%s\n", buf); //basename 不会修改buf中的值,以下两次调用都是可以的 strncpy (buf, str, strlen(str)); //1次 printf ("test1 basename is:%s\n", basename(buf)); printf ("name buf is:%s\n", buf); //2次 printf ("test2 basename is:%s\n", basename(str)); return 0; }
补充:
利用 strrchr 获取文件扩展名称(后缀)
#include <stdio.h> #include <string.h> int main ( int argc, char *argv[] ) { char *str = "/hah/test/test.hah.dd.json"; char *suffix = strrchr (str, '.'); printf ("suffix is:%s\n", suffix); return 0; }