Как найти домашнюю папку в C # из другого каталога? - PullRequest
0 голосов
/ 04 июня 2018

Я развернул веб-приложение .NET Core на Ubuntu 16.04 LTS сервере, используя nginx.

Я хотел бы найти этот каталог :

# Location source code
/home/user-0123456/webapp

Из этого места:

// Location compiled code and source to outside world
/var/webapp

В этом случае user-0123456 исправлен, но исправление должно быть универсальным.То есть в будущем все может измениться, но вы можете предположить, что всегда будет один пользователь.

Я наткнулся на этот пост, но обе эти строки:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)

возвращают /var/www вместо /home/user-0123456/webapp.

Вопрос

Итак, как мне найти корневой каталог моего каталога 'webapp' в домашней папке из другого пути?

1 Ответ

0 голосов
/ 04 июня 2018

Простой, вы можете получить каталог HOME с помощью:

System.Environment.GetEnvironmentVariable("HOME");

Однако, если ваше приложение работает под учетной записью www-data, "home" будет домашним каталогом пользователя www-dataа не пользователь, в котором вы сейчас авторизованы ...

А если вы хотите получить корневой каталог веб-приложения, это будет

System.IO.Path.GetDirectoryName(typeof(Program).Assembly.Location);

Но если выЕсли вы хотите сопоставить каталог в / var / xyz с / home / user-123 / xyz, то вы делаете:

string user = System.Environment.GetEnvironmentVariable("USER");
string app = System.IO.Path.GetDirectoryName(typeof(Program).Assembly.Location);
app = app.Substring("/var/".Length);
string sourceDir = System.IO.Path.Combine("/home", user, app);

Если вам действительно нужен домашний каталог другого пользователя, вот как вы его получитепо имени пользователя:

string username = "user-123";
Mono.Unix.Native.Passwd pwd = Mono.Unix.Native.Syscall.getpwnam(username);
// pwd.pw_uid
string dir = pwd.pw_dir;
System.Console.WriteLine((dir));

Для последнего требуется Mono.Posix, скомпилированный для .NET-Core / NetStandard2.0, и собственная библиотека, которая mono.posix оборачивает свои Linux-системные вызовы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...