папкаbrowserdialog на C # winforms - PullRequest
       12

папкаbrowserdialog на C # winforms

3 голосов
/ 07 августа 2010

Я использую folderBrowserDialog в моей winform.

Мне нужен путь по умолчанию или начальный путь, чтобы быть сетевым.

например:

folderBrowserDialog1.SelectedPath = @"\\server1\foo\bar\";

Это не работает. Моя система находится в нужной сети, и я могу получить доступ к каталогу через браузер и выполнить команду.

Это не функция? или есть обходной путь? Я был бы признателен, если бы кто-то смог мне помочь!

Спасибо, Ивар

Ответы [ 2 ]

3 голосов
/ 07 августа 2010

По моему опыту, .NET всегда сталкивался с путями UNC. Иногда это работает, а иногда нет. Я уверен, что есть хорошее объяснение этому, но вначале я искал и искал, не найдя ответа.

Вместо того, чтобы разобраться с проблемой, я просто принял политику, согласно которой лучше самому сопоставить диск, а затем отключить его, когда это будет сделано в коде. (Если вы найдете ответ, мне будет интересно узнать, почему это так, но, поскольку у меня есть работающее решение, мне все равно, чтобы исследовать его самостоятельно.) Это работает для нас 100% времени, и это очень просто. Для этого я создал класс, поскольку в нашем магазине такая обычная задача.

Я не знаю, открыты ли вы для этой идеи, во всяком случае, но если вы заинтересованы, и у вас еще нет кода, наша процедура вставлена ​​ниже. Было бы довольно просто проверить наличие открытой буквы диска и просто сопоставить ее, а затем отключить, когда все будет готово.

public static class NetworkDrives
    {
        public static bool  MapDrive(string DriveLetter, string Path, string Username, string Password)
        {

            bool ReturnValue = false;

            if(System.IO.Directory.Exists(DriveLetter + ":\\"))
            {
                DisconnectDrive(DriveLetter);
            }
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.RedirectStandardOutput = true;

            p.StartInfo.FileName = "net.exe";
            p.StartInfo.Arguments = " use " + DriveLetter + ": " + Path + " " + Password + " /user:" + Username;
            p.Start();
            p.WaitForExit();

            string ErrorMessage = p.StandardError.ReadToEnd();
            string OuputMessage = p.StandardOutput.ReadToEnd();
            if (ErrorMessage.Length > 0)
            {
                throw new Exception("Error:" + ErrorMessage);
            }
            else
            {
                ReturnValue = true;
            }
            return ReturnValue;
        }
        public static bool DisconnectDrive(string DriveLetter)
        {
            bool ReturnValue = false;
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.RedirectStandardOutput = true;

            p.StartInfo.FileName = "net.exe";
            p.StartInfo.Arguments = " use " + DriveLetter + ": /DELETE";
            p.Start();
            p.WaitForExit();

            string ErrorMessage = p.StandardError.ReadToEnd();
            string OuputMessage = p.StandardOutput.ReadToEnd();
            if (ErrorMessage.Length > 0)
            {
                throw new Exception("Error:" + ErrorMessage);
            }
            else
            {
                ReturnValue = true;
            }
            return ReturnValue;
        }

    }
1 голос
/ 07 августа 2010

Windows создает временное сопоставление при доступе к сетевому ресурсу с использованием соглашения \\name.Я не уверен, что есть возможность сделать то же самое из приложения .net в сжатой форме.Возможно, вы захотите сначала сопоставить диск букве, а затем получить к нему доступ с помощью @"Z:\foo\bar\", но, очевидно, сопоставление диска может быть не тем, что вы хотите делать, если ваше приложение развернуто таким образом, что это предотвращает.

...