如何获取文件名命令行参数的完整路径?
Posted
技术标签:
【中文标题】如何获取文件名命令行参数的完整路径?【英文标题】:How do I get the full path for a filename command-line argument? 【发布时间】:2009-11-02 15:33:37 【问题描述】:我找到了很多库来帮助解析命令行参数,但似乎没有一个库可以处理文件名。如果我在命令行上收到类似“../foo”的信息,我如何找出文件的完整路径?
【问题讨论】:
为什么你认为你需要文件的完整路径?系统调用在相对路径下工作得很好。 我相信“pwd”命令会为您提供当前路径/位置。你应该能够弄清楚其余的......但是安德鲁(上面的评论)是正确的。 我的实用程序会生成一些文本文件,因此我需要完整路径。构建路径听起来很痛苦,这肯定已经解决了 1000 次。 向实用程序传递完整路径。问题解决了。 【参考方案1】:您可以使用boost::filesystem
从文件的relative path
中获取文件的absolute path
:
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;
【讨论】:
【参考方案2】:POSIX 有realpath()
。
#include <stdlib.h>
char *realpath(const char *filename, char *resolvedname);
描述realpath() 函数从 filename 指向的路径名派生出一个绝对路径名,用于命名同一个文件,其解析不涉及“.”、“.. ",或符号链接。生成的路径名存储在 resolvedname 指向的缓冲区中,最多为 PATH_MAX 个字节。
【讨论】:
感谢乔纳森的编辑;尤其是总结。【参考方案3】:Boost.Filesystem
【讨论】:
【参考方案4】:在 shell 脚本中,命令“readlink -f”具有 realpath() 的功能。
【讨论】:
以上是关于如何获取文件名命令行参数的完整路径?的主要内容,如果未能解决你的问题,请参考以下文章