2013-07-05 102 views
5

當前用戶獲取桌面路徑我用對OS X

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES); 
NSString* theDesktopPath = [paths objectAtIndex:0]; 

它運作良好。但是當我使用sudo啓動應用程序時,它會提供根目錄的桌面路徑。是否有任何方式總是返回當前用戶的桌面(即使應用程序是用sudo啓動的)?

+0

你大概可以獲取當前用戶的UID而不是有效UID ...'男人getuid' –

+0

然後找到家目錄有:這些'男人的一個getpwuid' –

回答

3

我會說沒有辦法做到這一點。但我可以解釋我爲什麼這麼想。當你使用NSUserDomain時,它縮小到活動用戶的文件結構。所以就像你說的,當你以root用戶的身份訪問文件時,它會改用root的目錄。它不能假設另一個用戶的目錄,因爲如果有多個用戶,它就不知道哪個用戶在運行它,因此不知道要訪問哪個桌面目錄。

我找到了解決這個問題的方法。而不是使用NSSearchPathForDirectoriesInDomains,你將不得不使用環境變量來建立自己的路徑。當您在OS X上使用sudo時,它不會覆蓋$HOME變量,因此它會保留調用者的主目錄。您可以訪問所有的環境變量與

[[NSProcessInfo processInfo] environment]; 

,並得到$HOME

[[[NSProcessInfo processInfo] environment] objectForKey:@"HOME"]; 

所以,你可以抓住$HOME作爲一個字符串並追加/Desktop它。這在沙盒中不能正常工作,但是因爲你正在討論以root身份運行它,所以我認爲你不是。

3

我使用下面的語句。

[NSURL fileURLWithPath:[NSHomeDirectory()stringByAppendingPathComponent:@"Desktop"]] 
+0

它還返回類似沙盒的路徑'/用戶/ {用戶} /圖書館/容器/ {app_bundle} /數據/桌面/',這太棒了! –