如何让 FolderBrowserDialog 只显示网络 [英] How to get FolderBrowserDialog to show only Network

查看:43
本文介绍了如何让 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 -

  1. 如果 SelectedPath 设置为以反斜杠结尾的字符串,我得到网络和只有那个服务器 - 选择了指定的路径.
  2. 如果 SelectedPath 设置为不以反斜杠,我从 1) 和其他 3 个工作站中获得所有内容网络(应该有 700 左右).
  3. 如果我不设置 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆