2016-05-16 69 views
0

有什么方法可以知道程序最初在C中产生的目录?我希望我的程序知道它在计算机中的位置。我已经尝试在direct.h中使用_getcwd()。我也试过getcwd()使用unistd.h。但这是问题。如果我将PATH添加到我的程序目录中,则函数_getcwd()getcwd()路径将返回我调用该程序的路径。所以如果我用dekstop运行程序,它将返回桌面的路径。我已经尝试使用this方法,但它不能解决问题。它返回调用路径的值。我想知道用什么函数来知道程序的路径,而不是程序被调用的路径。 我应该使用什么功能?获取程序调用的原始位置

+0

早些时候已经尝试过这些方法。它返回被调用的路径,而不是被调用的程序的原始路径。 –

回答

0

当前的工作目录是没有用的。在文件系统中的可执行映像的位置与当前工作目录之间没有联系,而不是巧合。

你可以通过调用_get_wpgmptr(一个Microsoft特定的扩展,随Visual Studio中的CRT)或GetModuleFileName(通过NULLHMODULE)检索到可执行文件完全合格的路径,并通过调用PathRemoveFileSpec解压路径(或者Windows 8及更高版本的PathCchRemoveFileSpec)。

+0

我正在使用Windows 7.'_get_wpgmptr()'出现在什么库?已经包含'stdlib.h'和'windows.h',但编译器说:''_get_wpgmptr''的未定义引用。 –

+1

@BryanJames:'_get_wpgmptr()'是Visual Studio的CRT实现的一部分,因此您需要'#include **和**使用Visual Studio(或Microsoft Compiler)。如果您使用的是不同的编译器,则可以使用Windows API调用“GetModuleFileName”。 – IInspectable