如何让 FolderBrowserDialog 只显示网络 [英] How to get FolderBrowserDialog to show only Network
本文介绍了如何让 FolderBrowserDialog 只显示网络的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
代码如下:
private string SelectNetworkFolder(FolderBrowserDialog oFolderBrowserDialog)
{
Type type = oFolderBrowserDialog.GetType();
FieldInfo fieldInfo = type.GetField("rootFolder", BindingFlags.NonPublic | BindingFlags.Instance);
fieldInfo.SetValue(oFolderBrowserDialog, (Environment.SpecialFolder)18);
oFolderBrowserDialog.Description = "Choose destination for the zip file(s)";
PackageImagesViewModel viewModel = this.DataContext as PackageImagesViewModel;
oFolderBrowserDialog.SelectedPath = viewModel.GetMediaFolder();
if (oFolderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
return oFolderBrowserDialog.SelectedPath.ToString();
}
else
{
return "";
}
}
这就是事情变得疯狂的地方 -
This is where things get crazy -
- 如果 SelectedPath 设置为以反斜杠结尾的字符串,我得到网络和只有那个服务器 - 选择了指定的路径.
- 如果 SelectedPath 设置为不以反斜杠,我从 1) 和其他 3 个工作站中获得所有内容网络(应该有 700 左右).
- 如果我不设置 SelectedPath,我将获得网络上的所有工作站.
有谁知道我怎样才能列出所有工作站并将当前选择作为指定文件夹?其中一项要求是仅显示网络共享.
Anyone know how I can get all workstations listed and the current selection to be a specified folder? One of the requirements is to show ONLY network shares.
推荐答案
我让产品负责人更改了需求.现在,用户可以选择任何文件夹,如果该文件夹不是网络共享,则会收到错误消息.
I got the product owner to change the requirements. Now the user can pick any folder and will get an error if the folder isn't a network share.
private void RadButton_Click(object sender, RoutedEventArgs e)
{
PackageImagesViewModel viewModel = this.DataContext as PackageImagesViewModel;
VistaFolderBrowserDialog d = new VistaFolderBrowserDialog();
d.Description = "Please select a network share";
d.SelectedPath = viewModel.GetMediaFolder();
bool? pathSelected = d.ShowDialog();
if (pathSelected == false)
return;
string value = GetUncPath(d.SelectedPath);
if (string.IsNullOrEmpty(value))
{
MessageBox.Show("The selected folder is not recognized as a network path.", "Invalid Target Directory");
return;
}
viewModel.DestinationFolder = value;
}
private string GetUncPath(string path)
{
if (path.StartsWith("\\"))
return path;
try
{
ManagementObject mo = new ManagementObject();
mo.Path = new ManagementPath(string.Format("Win32_LogicalDisk='{0}'", path.Substring(0, 2)));
// DriveType 4 = Network Drive
if (Convert.ToUInt32(mo["DriveType"]) == 4)
return Convert.ToString(mo["ProviderName"]) + path.Substring(2);
else
return string.Empty;
}
catch { return string.Empty; }
}
这篇关于如何让 FolderBrowserDialog 只显示网络的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文