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

相关推荐
hoiii18713 分钟前
16APSK/32APSK调制解调MATLAB仿真实现
开发语言·matlab·fpga开发
feifeigo12338 分钟前
基于MATLAB的情感语音模板培训与识别实现方案
开发语言·matlab
JH30731 小时前
Java Spring中@AllArgsConstructor注解引发的依赖注入异常解决
java·开发语言·spring
码农水水1 小时前
米哈游Java面试被问:机器学习模型的在线服务和A/B测试
java·开发语言·数据库·spring boot·后端·机器学习·word
C++ 老炮儿的技术栈2 小时前
C/C++ 中 inline(内联函数)和宏定义(#define)的区别
开发语言·c++·git·算法·机器人·visual studio
我什么都学不会2 小时前
Python练习作业2
开发语言·python
yeflx2 小时前
CMake+CUDA
c++
henujolly2 小时前
ethers.js读取合约信息
开发语言·javascript·区块链
Eugene__Chen2 小时前
Java关键字(曼波版)
java·开发语言
轻微的风格艾丝凡2 小时前
C语言内联函数(inline)与宏函数(#define)技术文档
c语言