C++ Windows从当前路径启动一个目录
我已经找了几个小时了,但还没有找到解决这个问题的办法。道歉这可能真的很简单 我的程序正在使用C++ Windows从当前路径启动一个目录,c++,windows,winapi,C++,Windows,Winapi,我已经找了几个小时了,但还没有找到解决这个问题的办法。道歉这可能真的很简单 我的程序正在使用CreateDirectory创建一个新目录,然后设置其路径以接收多个数据文件: if (CreateDirectory(dateTime.c_str(), NULL) || ERROR_ALREADY_EXISTS == GetLastError()) { SetCurrentDirectory(dateTime.c_str()); } 生成所有数据文件后,我希望在不指定绝对路径的情况下向上移
CreateDirectory
创建一个新目录,然后设置其路径以接收多个数据文件:
if (CreateDirectory(dateTime.c_str(), NULL) || ERROR_ALREADY_EXISTS == GetLastError())
{
SetCurrentDirectory(dateTime.c_str());
}
生成所有数据文件后,我希望在不指定绝对路径的情况下向上移动一个目录。类似于
cd..
或./
的东西有人知道这样做的最佳方法吗?一种可能的方法是在更改到新目录之前获取当前目录(),完成后,再更改回所需的目录;类似于推/弹出
在示例中,为了简单起见,我省略了错误检查和缓冲区大小要求
TCHAR resetDir[1024] = {};
GetCurrentDirectory(1024, resetDir);
//... Do some work, change directories etc...
// Reset the directory
SetCurrentDirectory(resetDir);
旁注:启动进程时的当前目录不一定与进程映像所在的目录(exe路径)相同
相对的改变可以通过一个简单的方法来完成
SetCurrentDirectory(_T(".."));
尽管基于当前目录中的亲戚也会起作用(并且可能更好)
在内部,
cd
命令使用SetCurrentDirectory
结束。因此,要获得相当于cd..
或cd../
的内容,您只需使用:
cr = ::SetCurrentDirectory("..");
cr
如果成功,则应为非零;如果失败,则应为0。在后一种情况下,请使用GetLastError
获取更多信息。之前如何调用?您是否已尝试SetCurrentDirectory((dateTime+“\\\”).c_str())代码>?您的错误可能是依赖于相对路径。为什么不使用绝对路径?谢谢harper-是的GetCurrentDirectory使用了下面的答案。绝对路径肯定会更简单-当时我认为我需要使用相对路径,但我也找到了使用绝对路径的方法,所以谢谢您当前目录是按进程管理的。任何线程都可以随时更改它。依赖当前的工作目录总是一个等待发生的bug。这种方法对我来说很有效,但我知道它最终会变成bug。非常感谢。
cr = ::SetCurrentDirectory("..");