Я настраиваю программу, которая будет импортировать файлы с компьютера пользователя в одночасье на центральный сервер. Пользователи получают доступ к программе из RemoteApp на основе сервера. Когда папкаBrowserDialog открывается и пользователь выбирает что-то из папки «Документы», я использовал приведенный ниже код, чтобы получить путь UN C компьютера пользователя. Проблема в том, что, поскольку они подключаются через RemoteApp, он всегда возвращает tsclient как root. Это не принесет мне пользы, когда я попытаюсь запустить программу, которая импортирует файлы в одночасье. И я не всегда могу предположить, что они всегда будут выбирать папку в папке своих пользователей. Это может быть где угодно.
Как мне получить имя их компьютера или хотя бы путь, который будет иметь смысл для импортера?
private static String GetUNCPath(String path)
{
path = path.TrimEnd('\\', '/') + Path.DirectorySeparatorChar;
DirectoryInfo d = new DirectoryInfo(path);
String root = d.Root.FullName.TrimEnd('\\');
if (!root.StartsWith(@"\\"))
{
ManagementObject mo = new ManagementObject();
mo.Path = new ManagementPath(String.Format("Win32_LogicalDisk='{0}'", root));
// DriveType 4 = Network Drive
if (Convert.ToUInt32(mo["DriveType"]) == 4)
root = Convert.ToString(mo["ProviderName"]);
else
root = @"\\" + System.Net.Dns.GetHostName() + "\\" + root.TrimEnd(':') + "$\\";
}
return Recombine(root, d);
}
private static String Recombine(String root, DirectoryInfo d)
{
Stack s = new Stack();
while (d.Parent != null)
{
s.Push(d.Name);
d = d.Parent;
}
while (s.Count > 0)
{
root = Path.Combine(root, (String)s.Pop());
}
return root;
}