2016-02-25 105 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獲取更多信息。

相關問題