用于从路径中提取文件名的便携式纯 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有这样的。
我正在寻找一种可移植的方法来从 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有这样的。