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

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() 的功能。

【讨论】:

以上是关于如何获取文件名命令行参数的完整路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 中的文件路径中去除引号和命令行参数?

Linux命令行简介

如何从C#中的文件路径中删除引号和命令行参数?

文件路径作为命令行参数

如何在命令行启动参数上转义文件路径中的空格

如何在命令行启动参数上转义文件路径中的空格