在C ++中设置正在运行的应用程序的当前目录

时间:2012-09-03 21:42:49

标签: c++ c winapi native

下面的answer给出了一个使用C#的解决方案,我想知道如果只使用c ++(而不是c ++ \ cli)会有什么等价物

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

有没有什么可以解决这个问题?

根据这个问题,我一直在:Correctly creating and running a win32 service with file I/O

3 个答案:

答案 0 :(得分:8)

SetCurrentDirectory(在Win32中):

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365530%28v=vs.85%29.aspx

current_path中的

boost::filesystem

http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/reference.html#current_path

BaseDirectory的等价物可能是GetModuleFileName(第一个参数的句柄为空),后跟GetFullPathName从可执行路径获取目录。

答案 1 :(得分:4)

使用SetCurrentDirectory WINAPI。

What is the difference between _chdir and SetCurrentDirectory in windows?

还有一个答案可用

也许还需要模块名称(从评论中看似),这是我老店里的一个: -

int main()
{
  char path[MAX_PATH]={0};
  GetModuleFileName(0,path,MAX_PATH);
}

答案 2 :(得分:4)

在Windows中,完全相当于

System.IO.Directory.SetCurrentDirectory ( System.AppDomain.CurrentDomain.BaseDirectory )` 

将是:

// Get full executable path
char buffer[MAX_PATH];
GetModuleFileName(NULL, buffer, MAX_PATH);

// Get executable directory
boost::filesystem::path path(buffer);
path = path.parent_path();

// Set current path to that directory
boost::filesystem::current_path( path );

请注意,没有与平台无关的方法来获取应用程序的目录,因为C ++无法识别标准中的目录概念。 Boost似乎也没有相同的功能。