正在获取macOS上当前用户的桌面路径



我使用

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身份运行它,我想你不是。

相关内容

最新更新