Простой, вы можете получить каталог 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-системные вызовы.