當前用戶獲取桌面路徑我用對OS X
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
NSString* theDesktopPath = [paths objectAtIndex:0];
它運作良好。但是當我使用sudo啓動應用程序時,它會提供根目錄的桌面路徑。是否有任何方式總是返回當前用戶的桌面(即使應用程序是用sudo啓動的)?
當前用戶獲取桌面路徑我用對OS X
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
NSString* theDesktopPath = [paths objectAtIndex:0];
它運作良好。但是當我使用sudo啓動應用程序時,它會提供根目錄的桌面路徑。是否有任何方式總是返回當前用戶的桌面(即使應用程序是用sudo啓動的)?
我會說沒有辦法做到這一點。但我可以解釋我爲什麼這麼想。當你使用NSUserDomain時,它縮小到活動用戶的文件結構。所以就像你說的,當你以root用戶的身份訪問文件時,它會改用root的目錄。它不能假設另一個用戶的目錄,因爲如果有多個用戶,它就不知道哪個用戶在運行它,因此不知道要訪問哪個桌面目錄。
我找到了解決這個問題的方法。而不是使用NSSearchPathForDirectoriesInDomains
,你將不得不使用環境變量來建立自己的路徑。當您在OS X上使用sudo
時,它不會覆蓋$HOME
變量,因此它會保留調用者的主目錄。您可以訪問所有的環境變量與
[[NSProcessInfo processInfo] environment];
,並得到$HOME
與
[[[NSProcessInfo processInfo] environment] objectForKey:@"HOME"];
所以,你可以抓住$HOME
作爲一個字符串並追加/Desktop
它。這在沙盒中不能正常工作,但是因爲你正在討論以root身份運行它,所以我認爲你不是。
我使用下面的語句。
[NSURL fileURLWithPath:[NSHomeDirectory()stringByAppendingPathComponent:@"Desktop"]]
它還返回類似沙盒的路徑'/用戶/ {用戶} /圖書館/容器/ {app_bundle} /數據/桌面/',這太棒了! –
你大概可以獲取當前用戶的UID而不是有效UID ...'男人getuid' –
然後找到家目錄有:這些'男人的一個getpwuid' –