用于从路径中提取文件名的便携式纯 C 函数

Portable plain C function for extracting filename from path

我正在寻找一种可移植的方法来从 ANSI C 中的路径字符串中提取文件名。

路径如下:

C:\tmp\abc.txt

C:/tmp/abc.txt

c:/tmp\abc.txt

../abc.txt

c:tmp/abc.txt

c:abc.txt

abc.txt

./abc.txt

/home/user/abc.txt

/home/.././var/tmp/abc.txt

对于每个案例,我想提取 "abc.txt"

是否有通用的解决方案? (我在这里和 google 都没有找到)

C 标准中没有指定此类函数或要求实现提供此类函数的任何内容。

此外,如果不专门针对目标环境进行定制,则无法自行实施。证明:

  • 在 Windows 系统上,abc\def.txt 的文件名部分是 def.txt
  • 在macOS系统上,abc\def.txt的文件名部分是abc\def.txt

由于相同输入的正确结果在不同的系统上是不同的,因此独立于目标环境的文件名语法的函数无法实现这一点。

因此,任何此类函数都必须针对特定的一个或多个实现编写,或者必须考虑并适应其编译环境。

我不知道有什么软件提供这样的功能,并不是说none有这样的。