当前位置: 首页 > article >正文

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

文章目录

      • 主要函数
      • 使用注意事项
      • 示例程序
      • 总结


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

主要函数

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

  1. basename(char *path):

    • 功能:返回给定路径中的基本文件名(去掉路径部分)。
    • 示例:
      #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):

    • 功能:返回给定路径的目录部分(去掉文件名)。
    • 示例:
      #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

#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 函数非常方便,可以有效地帮助处理和解析文件路径。在进行文件操作时,合理使用这两个函数可以简化你的代码。


http://www.kler.cn/news/340876.html

相关文章:

  • K8s(学习笔记)
  • 【Oracle APEX开发小技巧9】通过页面设置文本大写避免upper()函数转换占用额外资源
  • 息肉检测数据集 yolov5 yolov8适用于目标检测训练已经调整为yolo格式可直接训练yolo网络
  • Axios 和 Ajax 的区别与联系
  • 【React】setState (useState) 是怎么记住上一个状态值的?
  • (1)Matlab画常见普通柱状图
  • 使用YOLOv11进行视频目标检测
  • Leetcode 18. 四数之和
  • C++面试速通宝典——13
  • 报销系统数据库设计
  • 系统架构设计师教程 第13章 13.6 物联网层次架构设计 笔记
  • 动态规划算法专题(六):回文串问题
  • Fetch获取内容乱码问题
  • 【python机器学习】线性回归 拟合 欠拟合与过拟合 以及波士顿房价预估案例
  • Spring Boot 自动配置原理
  • LeetCode hot100---滑动窗口专题(C++语言)
  • NUKE 15有哪些新的改进功能?影视后期特效合成NUKE 15 安装包分享 【Mac/win】
  • 3D看车如何实现?有哪些功能特点和优势?
  • Clio——麻省理工学院增强机器人场景理解算法
  • 【SQL】换座位