【问题标题】:How do I get the full path for a filename command-line argument?如何获取文件名命令行参数的完整路径?
【发布时间】:2009-11-02 15:33:37
【问题描述】:

我找到了很多库来帮助解析命令行参数,但似乎没有一个库可以处理文件名。如果我在命令行上收到类似“../foo”的信息,我如何找出文件的完整路径?

【问题讨论】:

  • 为什么你认为你需要文件的完整路径?系统调用在相对路径下工作得很好。
  • 我相信“pwd”命令会为您提供当前路径/位置。你应该能够弄清楚其余的......但是安德鲁(上面的评论)是正确的。
  • 我的实用程序会生成一些文本文件,因此我需要完整路径。构建路径听起来很痛苦,这肯定已经解决了 1000 次。
  • 向实用程序传递完整路径。问题解决了。

标签: c++ c linux macos


【解决方案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】:

    【讨论】:

      【解决方案4】:

      在 shell 脚本中,命令“readlink -f”具有 realpath() 的功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-15
        • 1970-01-01
        • 2014-06-08
        • 1970-01-01
        • 1970-01-01
        • 2016-09-17
        相关资源
        最近更新 更多