我想有一个标准的功能,将相对路径转换为绝对路径,如果可能我想尽可能跨平台(所以我' d喜欢避免调用外部库函数)。这是为了防止路径利用。安全的跨平台功能,以获得规范化的路径
我知道这样的函数将无法检测到符号链接,但对于我的应用程序而言,我可以。
我可以推出自己的代码,但可能会有一些问题,例如,一个平台如何处理“../”模式的编码或变体。
有没有像这样的东西已经实施?
我想有一个标准的功能,将相对路径转换为绝对路径,如果可能我想尽可能跨平台(所以我' d喜欢避免调用外部库函数)。这是为了防止路径利用。安全的跨平台功能,以获得规范化的路径
我知道这样的函数将无法检测到符号链接,但对于我的应用程序而言,我可以。
我可以推出自己的代码,但可能会有一些问题,例如,一个平台如何处理“../”模式的编码或变体。
有没有像这样的东西已经实施?
因为C或C++标准库中没有这样的函数,所以没有可以调用的单一通用函数。在Windows上,您可以使用GetFullPathName
。在Linux,Mac OS X和其他基于Unix的系统上,您可以使用realpath(3)
函数,该函数也可以解决符号链接问题。
请注意:任何对此的解决方案在单线程程序中都是可靠的。如果您使用多个线程,则另一个线程可能会出现并意外更改工作目录,从而更改路径名称解析。
我认为最接近平台独立性的是POSIX libraries。特别是你会想看看unistd.h,不幸的是我不相信有一个“标准化”的路径概念。如果我没有记错的话,标准本身甚至不知道有关目录的知识,更不用说相关的知识。
为了获得比这更好的结果,我认为你需要推出自己的道路好吃的东西。
如果我能保证它能覆盖所有情况,我就不会遇到自己的解决方案。我不确定,例如,如果有任何编码陷阱可能仍然容易受到攻击 – Waneck
跨平台是否意味着Windows? –
这将是伟大的,如果它! :) 但是,任何指向正确路径的解决方案都是好的! – Waneck