代码之家  ›  专栏  ›  技术社区  ›  341008 Sylvain

在Linux中,是否有任何C API可以从其完整路径中提取基本文件名?

  •  13
  • 341008 Sylvain  · 技术社区  · 14 年前

    给定完整路径,API应该给我基本文件名。例如,“/foo/bar.txt”--->bar.txt”。

    4 回复  |  直到 12 年前
        1
  •  10
  •   Federico klez Culloca    14 年前

    basename() .

    给它提供一条路径(以 char* )它将以另一种形式返回基名称(即所需文件/目录的名称) 字符*

    编辑:

    我忘了告诉你 basename() 修改其参数。如果您想避免这种情况,可以使用的GNU版本 在您的源中预先准备:

    #define _GNU_SOURCE
    #include <string.h>
    

    将返回一个空字符串,如果您使用。 /usr/bin/

        2
  •  8
  •   Marco Bonelli    5 年前
    #include <string.h>
    
    char *basename(char const *path)
    {
        char *s = strrchr(path, '/');
        if (!s)
            return strdup(path);
        else
            return strdup(s + 1);
    }
    
        3
  •  5
  •   Nicholas Knight    14 年前

    您需要basename(),它几乎应该出现在任何POSIX系统上:

    http://www.opengroup.org/onlinepubs/000095399/functions/basename.html

    #include <stdio.h>
    #include <libgen.h>
    
    int main() {
      char name[] = "/foo/bar.txt";
      printf("%s\n", basename(name));
      return 0;
    }
    

    ...

    $ gcc test.c
    $ ./a.out
    bar.txt
    $ 
    
        4
  •  0
  •   pan1nx    12 年前

    我认为@matt joiner的正确C代码应该是:

    char *basename(char const *path)
    {
            char *s = strrchr(path, '/');
            if(s==NULL) {
                    return strdup(path);
            } else {
                    return strdup(s + 1);
            }
    }