如何从另一个目录中找到C#中的主文件夹?

时间:2018-06-04 18:02:18

标签: c# ubuntu

我使用nginx# Location source code /home/user-0123456/webapp 服务器上部署了.NET Core Web应用程序。

我想找到这个目录

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

从此位置:

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

在这种情况下,用户-0123456是固定的,但修复应该是通用的。因此,未来可能会有所不同 - 但您可以假设总会有一个用户。

我确实遇到了this帖子,但这两行都是:

/var/www

返回/home/user-0123456/webapp而不是filter

问题

那么如何从另一条路径中找到主文件夹中'webapp'-dir的根目录?

1 个答案:

答案 0 :(得分:1)

简单,您可以使用以下命令获取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));

最后一个需要为.NET-Core / NetStandard2.0编译的Mono.Posix以及mono.posix包装其Linux系统调用的本机库。