Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Windows从当前路径启动一个目录_C++_Windows_Winapi - Fatal编程技术网

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("..");