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

相关推荐
水云桐程序员5 小时前
C++可以写手机应用吗
开发语言·c++·智能手机
测试员周周5 小时前
【AI测试智能体】为什么传统测试方法对智能体失效?
开发语言·人工智能·python·功能测试·测试工具·单元测试·测试用例
RSTJ_16255 小时前
PYTHON+AI LLM DAY THREETY-NINE
开发语言·人工智能·python
赏金术士6 小时前
Kotlin 从入门到进阶 之函数模块(核心基础)(二)
android·开发语言·kotlin
加号38 小时前
【Qt】 应用程序发布:依赖库拷贝与部署指南
开发语言·qt
('-')9 小时前
八股复习2:Java Array list和Linked list
java·开发语言
小黄人软件9 小时前
C++读写编辑CSV文件示例源码 用于数据导入导出,比Excel好使
开发语言·c++·excel
郭涤生9 小时前
C++各个版本的性能和安全性总结
开发语言·c++
wljy110 小时前
二、静态库的制作和使用
linux·c语言·开发语言·c++
道剑剑非道10 小时前
FFmpeg 6.0 实战:用 C++ 封装摄像头采集与 RTSP 推流
开发语言·c++·ffmpeg