1

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

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

有什么东西可以解决问题吗?

基于这个问题,我一直有:正确创建和运行带有文件 I/O 的 win32 服务

4

3 回答 3

8

SetCurrentDirectory(在 Win32 中):

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

current_pathboost::filesystem

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

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

于 2012-09-03T21:43:58.113 回答
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 似乎也没有等效的功能。

于 2012-09-03T21:58:01.720 回答
4

使用SetCurrentDirectory WINAPI。

在 Windows 中的 _chdir 和 SetCurrentDirectory有什么区别?

也许也需要模块名称(似乎来自评论),这是我旧商店的一个:-

int main()
{
  char path[MAX_PATH]={0};
  GetModuleFileName(0,path,MAX_PATH);
}
于 2012-09-03T21:47:22.760 回答