下面的答案给出了一个使用 C# 的解决方案,我想知道如果一个人只使用 c++(不是 c++\cli),那么等价物是什么
System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
有什么东西可以解决问题吗?
基于这个问题,我一直有:正确创建和运行带有文件 I/O 的 win32 服务
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
从可执行路径获取目录。
在 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 似乎也没有等效的功能。
使用SetCurrentDirectory WINAPI。
在 Windows 中的 _chdir 和 SetCurrentDirectory有什么区别?
也许也需要模块名称(似乎来自评论),这是我旧商店的一个:-
int main()
{
char path[MAX_PATH]={0};
GetModuleFileName(0,path,MAX_PATH);
}