C/C++解析文件名和目录路径

文章目录


#include <libgen.h> 是一个 C/C++ 语言的头文件,主要用于字符串处理,特别是在处理文件路径时。它提供了一些函数来帮助你解析文件名和目录路径。

主要函数

以下是 libgen.h 中一些常见的函数:

  1. basename(char *path):

    • 功能:返回给定路径中的基本文件名(去掉路径部分)。

    • 示例:

      c 复制代码
      #include <stdio.h>
      #include <libgen.h>
      
      int main() {
          char path[] = "/home/user/file.txt";
          printf("Base name: %s\n", basename(path)); // 输出: "file.txt"
          return 0;
      }
  2. dirname(char *path):

    • 功能:返回给定路径的目录部分(去掉文件名)。

    • 示例:

      c 复制代码
      #include <stdio.h>
      #include <libgen.h>
      
      int main() {
          char path[] = "/home/user/file.txt";
          printf("Directory name: %s\n", dirname(path)); // 输出: "/home/user"
          return 0;
      }

使用注意事项

  • 修改输入字符串 :这些函数通常会修改输入的字符串(即 path 参数)。因此,传入的字符串应该是可修改的(通常是数组,而不是字符串常量)。
  • 返回的指针 :返回的指针指向的是传入的参数,因此如果之后再次使用相同的 path,需要重新设置。
  • 不适用于复杂路径basenamedirname 对于某些复杂的路径(例如包含多个连续斜杠的路径或者以斜杠结尾的路径)可能无法提供预期的结果。

示例程序

下面是一个完整的程序,演示了如何使用 basenamedirname

c 复制代码
#include <stdio.h>
#include <libgen.h>
#include <string.h>

int main() {
    char path[] = "/home/user/file.txt";

    // 复制原始字符串以避免 basename/dirname 修改它
    char path_copy[256];
    strncpy(path_copy, path, sizeof(path_copy));

    printf("Original path: %s\n", path);
    printf("Base name: %s\n", basename(path_copy)); // 输出: "file.txt"

    // 重新复制原始字符串以获取目录名
    strncpy(path_copy, path, sizeof(path_copy));
    printf("Directory name: %s\n", dirname(path_copy)); // 输出: "/home/user"

    return 0;
}

总结

libgen.h 提供的 basenamedirname 函数非常方便,可以有效地帮助处理和解析文件路径。在进行文件操作时,合理使用这两个函数可以简化你的代码。

相关推荐
北风toto7 分钟前
研发效能与后端核心技术全景指南:从CI/CD到共性组件实战
java·开发语言·ci/cd
Billy121389 分钟前
Day12-C++20 Coroutines(上):协程原理与Promise/Awaitable机制
开发语言·c++进阶学习
01二进制代码漫游日记10 分钟前
C++基础入门速通
java·开发语言·c++
Herbert_hwt12 分钟前
第六章 Java深入理解接口、函数式接口与lambda表达式
java·开发语言·算法
tudousisi22223 分钟前
二维费用01背包
c++
2601_9561219726 分钟前
高精度问题
c++
橙橙笔记30 分钟前
C++的学习第三部分
开发语言·c++·学习
码匠许师傅9 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
2603_965148119 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
小小龙学IT10 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++