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

相关推荐
不穿格子的程序员6 分钟前
从零开始刷算法-栈-括号匹配
java·开发语言·
雪域迷影21 分钟前
C#中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·http·c#·get
yue00823 分钟前
C#类继承
java·开发语言·c#
Want59530 分钟前
Python汤姆猫
开发语言·python
Larry_Yanan1 小时前
QML学习笔记(五十)QML与C++交互:QML中单例C++对象
开发语言·c++·笔记·qt·学习·ui·交互
im_AMBER1 小时前
算法笔记 09
c语言·数据结构·c++·笔记·学习·算法·排序算法
凯芸呢1 小时前
Java中的数组(续)
java·开发语言·数据结构·算法·青少年编程·排序算法·idea
竹竹零1 小时前
JacksonUtil--序列化与反序列化
java·开发语言·windows
sheji34161 小时前
【开题答辩全过程】以 基于Java的旅游网站的设计与开发为例,包含答辩的问题和答案
java·开发语言·旅游
yue0082 小时前
C# XML文件的读写V2.0
xml·开发语言·c#