【问题标题】:How to return the directory of the cpp file?如何返回cpp文件的目录?
【发布时间】:2014-11-25 10:48:10
【问题描述】:

我正在尝试返回我正在运行的 cpp 文件的路径。有谁知道实现这一点的方法或方法?例如,假设我在我的计算机 "C:\Programming\Visual Studio\Test\Test\test.cpp" 的路径中有这个文件 test.cpp。

有没有办法在不手动输入的情况下获取此路径?我正在尝试确定一种使用 c++ 返回此路径的方法。

对于我的 ftp 程序,我需要获取 .txt、.pdf、.etc 文件的列表,这些文件与 .cpp 文件位于同一路径。这就是我想要.cpp 路径而不是.exe 路径的原因。

有什么建议吗?

【问题讨论】:

  • 好像是 X/Y 问题,为什么需要这个?
  • 使用__FILE__宏
  • 检查boost::path 是否可移植地处理文件和路径名。
  • @VinceAbruzzese 请将这些重要细节编辑到问题中!这清楚地表明您不需要.cpp 文件的路径,而是编译后的.exe 文件。
  • @VinceAbruzzese cpp 文件没有被执行,它被编译成可执行文件。使用 boost::filesystem。

标签: c++ visual-studio-2013 directory


【解决方案1】:

正如您在 cmets 中所说:

"...但是对于我的 ftp 程序,我需要获取.txt、.pdf 等文件的列表,这些文件与.cpp 文件位于同一路径。"

您应该定义一种资源目录,即在安装应用程序时创建,安装过程将复制您的.txt、.pdf 等文件。

这种方式意味着您有一个安装过程(这可能是最简单的形式,只需创建和提取.zip 存档),它捆绑了可执行文件@ 987654328@ 文件连同这些资源文件,要安装在目标机器上。通常,您不会在其中包含源文件。

在这种情况下,引用源代码.cpp 文件的位置实际上是个坏主意,因为最终安装的程序通常不知道它的编译源。此外,该程序可能安装在与您的环境(尤其是开发环境)不同的机器上。

通用安装路径的更好入口点是相对于通过main() 程序入口的argv[0] 参数提供给您的路径。它为您提供已安装的可执行文件的完整路径。

对于其余部分,请使用例如可用的操作。 boost::filesystem library 以可移植的方式操作路径和文件名,如 cmets 中所述。

【讨论】:

    【解决方案2】:

    这个呢??

    #include<iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string file_path = __FILE__;
        string dir_path = file_path.substr(0, file_path.rfind("\\"));
        cout<<dir_path<<endl;
    
        return 0;
    }
    

    【讨论】:

    • 据我了解,OP的真正问题不能仅仅通过源文件路径来解决。
    • 但这正是他所要求的,现在他应该采取路径并使用FindFirstFileFindNextFile等并创建捆绑包。
    • 为什么要在目标部署机器上存在相同的源结构? OP 在他们的问题中错过了重要的一点。
    • @VinceAbruzzese 正如我的回答中提到的,你在这里树错了树,并且在另一台机器上部署你的程序会遇到严重的麻烦 只是采用最简单的建议解决方案,不会这是正确的选择。
    猜你喜欢
    • 2019-02-08
    • 2021-04-21
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2013-05-30
    • 2016-03-03
    • 2013-01-10
    • 1970-01-01
    相关资源
    最近更新 更多