如何在命令行参数中获取一个文件名的完整路径?

12

我发现很多库都可以帮助解析命令行参数,但是它们似乎都不能处理文件名。如果我在命令行上收到类似 "../foo" 这样的输入,如何确定文件的完整路径?


7
你为什么认为你需要完整的文件路径?系统调用在使用相对路径时也能正常工作。 - nobody
我相信命令“pwd”会给出您当前的路径/位置。你应该能够弄清剩下的部分...但是安德鲁(上面的评论)是正确的。 - Anthony M. Powers
1
我的实用程序会生成一些文本文件,因此我需要完整的路径。构建路径听起来很麻烦,这个问题肯定已经解决了1000次了。 - Roland Rabien
将完整路径传递给实用程序。问题解决了。 - ChadNC
4个回答

19

您可以使用boost :: filesystem获取文件的绝对路径,从其相对路径

namespace fs = boost::filesystem;
fs::path p("test.txt");
fs::path full_p = fs::complete(p); // complete == absolute
std::cout << "The absolute path: " << full_p;

16

POSIX 提供了 realpath() 函数。

#include <stdlib.h>
char *realpath(const char *filename, char *resolvedname);

描述
realpath() 函数从指向 filename 的路径名中,导出一个绝对路径名,它指定相同的文件,其解析过程不涉及 "."、".." 或符号链接。生成的路径名最多使用 {PATH_MAX} 字节存储在由 resolvedname 指向的缓冲区中。


感谢您的编辑,Jonathan;特别是您提供的摘要。 - pmg


1
在Shell脚本中,命令"readlink -f"具有realpath()的功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接