7

我用

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

它运作良好。但是当我使用 sudo 启动应用程序时,它会给出根的桌面路径。有什么方法可以始终返回当前用户的桌面(即使应用程序是使用 sudo 启动的)?

4

2 回答 2

7

我使用下面的语句。

[NSURL fileURLWithPath:[NSHomeDirectory()stringByAppendingPathComponent:@"Desktop"]]
于 2016-03-06T13:37:21.397 回答
4

我会说没有办法做到这一点。但我可以解释我为什么这么认为。当您使用 NSUserDomain 时,它会缩小到活动用户的文件结构。因此,就像您说的那样,当您以 root 用户身份访问文件时,它会使用 root 的目录。它不能假设另一个用户的目录,因为如果有多个用户,它首先不知道哪个用户在运行它,因此不知道要访问哪个桌面目录。

我找到了一种对你有用的方法。NSSearchPathForDirectoriesInDomains您必须使用环境变量自己构建路径,而不是使用。当您sudo在 OS X 上使用时,它不会覆盖$HOME变量,因此它会维护调用者的主目录。您可以访问所有环境变量

[[NSProcessInfo processInfo] environment];

$HOME得到

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

因此,您可以将其作为字符串抓取$HOME并附/Desktop加到它。这在沙盒中无法正常工作,但由于您正在谈论以 root 身份运行它,我认为您不是。

于 2013-07-05T16:17:26.513 回答