2016-02-25 109 views
2

我一直在寻找几个小时,但目前还找不到解决方案。道歉可能很简单。从当前路径向上Windows目录

我的程序正在使用CreateDirectory创建一个新的目录,然后将路径设置为它接收多个数据文件:

if (CreateDirectory(dateTime.c_str(), NULL) || ERROR_ALREADY_EXISTS == GetLastError()) 
{ 
    SetCurrentDirectory(dateTime.c_str()); 
} 

一旦所有的数据文件已经产生,我想搬回在不指定绝对路径的情况下建立一个目录相当于cd..../的东西有谁知道这样做的最佳方式?

+0

那么之前调用https://msdn.microsoft.com/en-us/library/windows/desktop/aa364934(v=vs.85).aspx怎么样? – harper

+0

您是否已经尝试过'SetCurrentDirectory((dateTime +“\\ ..”)。c_str());'? – harper

+2

你的错误可能是你对相对路径的依赖。你为什么不使用绝对路径? –

回答

2

一种可能的方法是在切换到新的目录之前获取当前目录(GetCurrentDirectory),一旦完成,然后更改所需的目录;类似于推/流行音乐。

在示例中,为了简单起见,我省略了错误检查和缓冲区大小要求。

TCHAR resetDir[1024] = {}; 
GetCurrentDirectory(1024, resetDir); 
//... Do some work, change directories etc... 
// Reset the directory 
SetCurrentDirectory(resetDir); 

边注:当进程启动当前目录不一定相同目录的过程图像是(exe文件路径)。

相对变化可以用简单的

SetCurrentDirectory(_T("..")); 

做虽然基础从当前目录的相对也将工作(并且可能是优选的);

SetCurrentDirectory((currentDir + _T("\\..")).c_str()); 
+1

当前目录是按流程进行管理的。任何线程都可以随时更改它。依赖于当前的工作目录始终是一个等待发生的错误。 – IInspectable

+0

这种方法适用于我,但是我知道它会如何在bug中发生。谢谢。 –

1

在内部,cd命令结束使用SetCurrentDirectory。因此,要得到的东西相当于cd..cd ../,你可以简单地使用:

cr = ::SetCurrentDirectory(".."); 

cr应该是非零如果它succeded和0,如果它失败了。在后一种情况下,请使用GetLastError获取更多信息。

相关问题