Получение пути рабочего стола для текущего пользователя на macOS
Я использую
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES );
NSString* theDesktopPath = [paths objectAtIndex:0];
Он работает хорошо. Но когда я запускаю приложение с sudo, оно дает путь к рабочему столу root. Есть ли способ вернуть рабочий стол текущего пользователя всегда (даже если приложение запускается с sudo)?
2 ответов
Я бы сказал, что нет никакого способа сделать это. Но я могу объяснить, почему я так думаю. При использовании NSUserDomain он сужается до структуры файла активного пользователя. Как вы сказали, когда вы получаете доступ к файлам в качестве пользователя root, он использует каталоги root. Он не мог предполагать каталоги другого пользователя, потому что если бы было несколько пользователей, он не знал бы, который запускает его в первую очередь, и поэтому не знает, к какому каталогу рабочего стола получить доступ.
я нашел способ вокруг этого это должно работать для вас. Вместо использования NSSearchPathForDirectoriesInDomains
вам придется построить свой путь самостоятельно, используя переменные среды. Когда вы используете sudo
в OS X он не перезаписывает $HOME
переменная, поэтому она поддерживает домашний каталог вызывающего абонента. Вы можете получить доступ ко всем переменным среды с помощью
[[NSProcessInfo processInfo] environment];
и вам $HOME
С
[[[NSProcessInfo processInfo] environment] objectForKey:@"HOME"];
, чтобы забрать $HOME
в виде строки и добавления /Desktop
к нему. Это не будет работать правильно в песочнице, но поскольку вы говорите о запуске его как root, я предполагаю, что это не так.
Я использую приведенную ниже инструкцию.
[NSURL fileURLWithPath:[NSHomeDirectory()stringByAppendingPathComponent:@"Desktop"]]