我用
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES );
NSString* theDesktopPath = [paths objectAtIndex:0];
效果很好。但是当我使用sudo启动应用程序时,它会提供root的桌面路径。有没有办法永远返回当前用户的桌面(即使应用程序是以sudo启动的)?
答案 0 :(得分:6)
我使用下面的陈述。
[NSURL fileURLWithPath:[NSHomeDirectory()stringByAppendingPathComponent:@"Desktop"]]
答案 1 :(得分:4)
我想说没有办法做到这一点。但我可以解释为什么我这么想。当您使用NSUserDomain时,它会缩小到活动用户的文件结构。就像你说的那样,当你以root用户身份访问文件时,它会使用root的目录。它不能假设另一个用户的目录,因为如果有多个用户,它将不知道哪个用户首先运行它,因此不知道要访问哪个桌面目录。
我找到了解决这个问题的方法。而不是使用NSSearchPathForDirectoriesInDomains
,您将不得不使用环境变量自己构建路径。在OS X上使用sudo
时,它不会覆盖$HOME
变量,因此它会维护调用者的主目录。您可以使用
[[NSProcessInfo processInfo] environment];
并使用
获取$HOME
[[[NSProcessInfo processInfo] environment] objectForKey:@"HOME"];
因此,您可以将$HOME
作为字符串抓取并将/Desktop
附加到其中。这在沙盒中无法正常工作,但由于您正在谈论以root身份运行它,我认为您不是。