我使用
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES );
NSString* theDesktopPath = [paths objectAtIndex:0];
它运行良好。但是当我用sudo启动应用程序时,它会给出root用户的桌面路径。有没有办法总是返回当前用户的桌面(即使应用程序是用sudo启动的)?
我使用下面的语句。
[NSURL fileURLWithPath:[NSHomeDirectory()stringByAppendingPathComponent:@"Desktop"]]
我想说没有办法做到这一点。但我可以解释我为什么这么想。当您使用NSUserDomain时,它会缩小到活动用户的文件结构。正如您所说,当您以root用户身份访问文件时,它会使用root的目录。它不能假设另一个用户的目录,因为如果有多个用户,它一开始就不知道哪个用户在运行它,因此也不知道要访问哪个桌面目录。
我找到了一种方法,应该对你有效。您将不得不使用环境变量自己构建路径,而不是使用NSSearchPathForDirectoriesInDomains
。当您在OSX上使用sudo
时,它不会覆盖$HOME
变量,因此它会维护调用方的主目录。您可以使用访问所有环境变量
[[NSProcessInfo processInfo] environment];
用得到CCD_ 4
[[[NSProcessInfo processInfo] environment] objectForKey:@"HOME"];
所以你可以把$HOME
作为一个字符串,并把/Desktop
附加到它上面。这在沙盒中是不正确的,但既然你说的是以root身份运行它,我想你不是。