可移植的普通C函数,用于从路径中提取文件名

时间:2019-04-18 17:28:11

标签: c filesystems portability ansi

我正在寻找一种从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都找不到)

1 个答案:

答案 0 :(得分:1)

C标准中没有任何东西可以指定这样的功能,也不需要实现来提供。

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

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

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

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

我不知道有提供这种功能的软件,但这并不是说没有这种软件。