2014-09-30 91 views
1

我想返回正在运行的cpp文件的路径。有谁知道一种方法或一种方法来实现这个?例如让我说我有这个文件test.cpp在我的电脑"C:\Programming\Visual Studio\Test\Test\test.cpp"的路径。如何返回cpp文件的目录?

有没有办法得到这个路径,而无需手动输入?我想确定一个使用C++来返回这个路径的方法。

对于我的ftp程序,我需要获取与.cpp文件位于相同路径的.txt.pdf,.etc文件的列表。这就是为什么我需要.cpp路径而不是.exe路径。

有什么建议吗?

+2

看起来像一个X/Y问题,你为什么需要这个? – Borgleader 2014-09-30 17:56:37

+0

使用'__FILE__'宏 – drescherjm 2014-09-30 17:59:04

+0

@Borgleader我正在尝试构建一个客户端/服务器ftp程序。我需要从服务器和客户端列出这两个文件。如果我从另一台计算机请求它,它可能需要一个不同的路径,这就是为什么我试图确定一种方法来做到这一点,而无需手动放置路径。 – VMA92 2014-09-30 17:59:16

回答

1

这是怎么回事?

#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; 
} 
+0

据我所知,OP的真正问题无法通过使用源文件路径来解决。 – 2014-09-30 18:49:44

+0

但正是他所问的,现在他应该采取路径并使用'FindFirstFile'' FindNextFile'等,并创建捆绑。 – SHR 2014-09-30 18:51:56

+0

为什么在目标部署机器上存在相同的源代码结构? OP在他们的问题中错过了重要的一点。 – 2014-09-30 18:54:37

2

正如您在留言注明:

” ......但我的FTP程序我需要得到.txt列表,.pdf等文件,这些文件位于与相同的路径.cpp文件“。

你应该拥有一个怎样定义的资源目录,安装应用程序时创建,并在你的.txt.pdf等文件将在安装过程中复制。

这样意味着你有一个安装过程(这可能是最简单的形式,通过刚刚创建和提取.zip存档),捆绑可执行.exe文件沿着这些资源文件,要在安装目标机器。通常,您不会在其中包含源文件。

在这种情况下,参考源文件.cpp的位置实际上是一个糟糕的主意,因为最终安装的程序通常没有它编译源的概念。此外,该程序可能安装在具有与您不同的环境(特别是开发环境)的机器上。

通用安装路径的一个更好的入口点是相对于程序条目的argv[0]参数给出的路径。它为您提供安装的可执行文件的完整路径。

其余的,使用例如可用的操作。 boost::filesystem library以便携的方式操作路径和文件名,如评论中所述。

相关问题