2012-11-05 83 views
4

我想使用C++在Mac OS上打開文件。如何將工作目錄更改爲程序的位置

如果我在Xcode下運行程序,工作目錄與程序相同,這很好。但是,如果我嘗試在終端中運行程序,工作目錄一直是「用戶/用戶名」。你知道如何改變工作目錄到程序的位置嗎?

下面是示例代碼:

#include <iostream> 
#include <fstream> 
using namespace std; 
int main (int argc, const char * argv[]) 
{ 
    char * dir = getcwd(NULL, 0); 
    cout << "Current dir: " << dir << endl; 

    ifstream fin("hi.txt"); 
    if (fin.is_open()) cout << "File is Open" << endl; 
    else cout << "File is not open" << endl;  
    fin.close(); 
    return 0; 
} 
+0

爲什麼你要程序使用它自己的安裝目錄爲當前目錄?它可能不會寫在那裏(如果軟件安裝正確)。它可能能夠更方便地閱讀文件,但這是值得商榷的。 OTOH,如果我從'$ HOME/src/subdir/myprogram'啓動程序,我希望指定相對於我啓動它的目錄的文件名,而不是'/ Applications/Doohickey.app/Contents/MacOS'或'$ HOME'或類似的東西。當然,這取決於程序的功能......但要謹慎使用'chdir()'。 –

+0

我只是想把所有的文件放在一起。我過去常常使用Windows。當我在windows下運行命令行程序時,該程序生成的文件應該位於程序的同一位置。我明白你的觀點。我會考慮一下。非常感謝。 –

+0

請記住,Windows主要不是多用戶系統,並且每個用戶的Unix主目錄都不是模擬的。這導致程序將數據分散到各地。在類Unix系統上,建議將數據存儲在$ HOME下。例如,配置信息可能位於文件(或目錄)'$ HOME/.yourapp'中。看看蘋果公司的OS X人機接口指南,瞭解在Mac OS X上的位置。 –

回答

9

使用在工作目錄值$(PROJECT_DIR)在你的計劃調試設置:

enter image description here

+0

** ** Xcode 5 **:產品 - >方案 - >編輯方案 - >運行「appname」 - > Options,在那裏你可以找到「工作目錄」選項。 – MondKin

+0

我在這裏遇到類似問題,無法根據此解決方案修復它。我渴望得到一個解決方案,並會以一些聲譽來彌補。 HTTP://計算器。com/questions/40920783/xcode-app-no-longer-reads-input-from-the-folder-the-app-is-storage-in –

+0

我也將提供一個賞金給誰可以幫助我修復它。 –

1

你可以使用CHDIR(),在這裏看到:Change the current working directory in C++

或者如果你總是可以發出系統調用(stdlib.h):http://www.cplusplus.com/reference/clibrary/cstdlib/system/。這不會是便攜式的,但它可能足夠滿足您的需求。

+0

但是你知道如何獲得正在運行的應用程序的路徑嗎? –

+0

'argv [0]'總是包含路徑(和程序名稱,當然) – llakais

+0

依賴於argv [0]可能不是一個好主意,沒有標準說明必須有一個完整路徑,只是啓動它的命令的第一部分。解決方案是使用'GetModuleFileName(...)'或'readlink(「/ proc/self/exe」,...)' – Youda008

3

您可以在Xcode中爲您的項目設置自定義工作目錄。在Xcode 4中,從項目窗口工具欄的Scheme菜單中選擇Edit Scheme以打開方案編輯器。從項目編輯器的左側選擇Run步驟。點擊方案編輯器頂部的選項按鈕。選擇使用自定義工作目錄複選框。單擊文本字段右側的按鈕以選擇工作目錄。

enter image description here

相關問題