C# FolderBrowserDialog - как включить общие папки

Я создаю FolderBrowserDialog следующим образом (только отрывок, а не полный код):

   string tempSetWorkingPath = null;
    try
    {
        FolderBrowserDialog folderDlg = new System.Windows.Forms.FolderBrowserDialog();

        folderDlg.ShowNewFolderButton = true;
        folderDlg.Description = "Selected your working folder. This is where your PDF files will be saved.";
        folderDlg.RootFolder = Environment.SpecialFolder.MyComputer;
        folderDlg.SelectedPath = (Convert.ToString(WorkingPath).Trim().Length == 0) ? ((int)Environment.SpecialFolder.MyComputer).ToString() : WorkingPath;

        if (folderDlg.ShowDialog() == DialogResult.OK)
        {
            tempSetWorkingPath = folderDlg.SelectedPath;
        }
        else
        {
            tempSetWorkingPath = "";
        }
    }

...

Код работает хорошо, за исключением того, что отображаются только локальные папки. У пользователей есть общие папки DropBox и OneDrive в своих системах, и чтобы выбрать один из этих каталогов, пользователю необходимо циклически просмотреть пользовательские каталоги Windows и выбрать папку оттуда. В некоторых системах, которые я видел за последние несколько месяцев, я видел, как каталоги DropBox и OneDrive появлялись под каталогом DeskTop ... но я не нашел, несмотря на часы поиска, способ добиться этого.

Как я могу этого добиться?

MTIA

DWE

Я считаю, что это зависит от версии системы - начиная с win 8 эти папки должны быть указаны на рабочем столе.

Mailosz 28.11.2018 13:14

@Mailosz - если вы разместите свой комментарий в качестве ответа, я был бы рад принять его .. изменив строку folderDlg.RootFolder = Environment.SpecialFolder.MyComputer; в папкуDlg.RootFolder = Environment.SpecialFolder.Desktop; ... работает как мечта ... спасибо :-)

DWE 29.11.2018 04:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
1 414
1

Ответы 1

Учитывая, что я наблюдал большое количество запросов, размещенных здесь и в других местах, относительно включения каталогов, включая общие каталоги, и учитывая ответ @ Mailosz, кажется, что свойство корневой папки диалогового окна папки содержит ключ - Он получает или устанавливает корневую папку, с которой начинается просмотр, и это то, что мой код скучал.

Полный код функции, упомянутой в моем вопросе, приведен ниже, если он помогает кому-то другому.

/// <summary>
/// presents the user with a folder dialog
/// Returns a full qualified directory chosen by the user
/// </summary>
/// <param name = "WorkingPath">if a fully qualified directory name is provided, then the folder structure in the folder dialog will open to the directory selected</param>
/// <returns>Returns a full qualified directory chosen by the user or if no directory was chosen, an empty string</returns>
public string SetWorkingPath(string WorkingPath)
{
    string tempSetWorkingPath = null;
    try
    {
        FolderBrowserDialog folderDlg = new System.Windows.Forms.FolderBrowserDialog();
        // check our proposed working path and if its valid
        if ((!string.IsNullOrEmpty(WorkingPath) && (WorkingPath != null)))
        {
            if (!Directory.Exists(WorkingPath))
                  WorkingPath = string.Empty;
        }
        else // if we are empty or null set us to empty
        {
            WorkingPath = string.Empty;
        }
        folderDlg.ShowNewFolderButton = true;
        folderDlg.Description = "Please select your working folder. This is where your PDF files will be saved.";
        folderDlg.RootFolder = Environment.SpecialFolder.Desktop;//.MyComputer;
        folderDlg.SelectedPath = (Convert.ToString(WorkingPath).Trim().Length == 0) ? ((int)Environment.SpecialFolder.MyComputer).ToString() : WorkingPath;

        if (folderDlg.ShowDialog() == DialogResult.OK)
        {
            // make sure we have a backslash on the end of our directory string
            tempSetWorkingPath = PathAddBackslash(folderDlg.SelectedPath);
        }
        else
        {
            // return an empty string
            tempSetWorkingPath = string.Empty;
        }
    }
    catch (Exception ex)
    {
        tempSetWorkingPath = string.Empty;

        throw (ex);
    }

    return tempSetWorkingPath;
}
public string PathAddBackslash(string path)
{
    // They're always one character but EndsWith is shorter than
    // array style access to last path character. Change this
    // if performance are a (measured) issue.
    string separator1 = Path.DirectorySeparatorChar.ToString();
    string separator2 = Path.AltDirectorySeparatorChar.ToString();

    // Trailing white spaces are always ignored but folders may have
    // leading spaces. It's unusual but it may happen. If it's an issue
    // then just replace TrimEnd() with Trim(). Tnx Paul Groke to point this out.
    path = path.TrimEnd();

    // Argument is always a directory name then if there is one
    // of allowed separators then I have nothing to do.
    if (path.EndsWith(separator1) || path.EndsWith(separator2))
        return path;

    // If there is the "alt" separator then I add a trailing one.
    // Note that URI format (file://drive:\path\filename.ext) is
    // not supported in most .NET I/O functions then we don't support it
    // here too. If you have to then simply revert this check:
    // if (path.Contains(separator1))
    //     return path + separator1;
    //
    // return path + separator2;
    if (path.Contains(separator2))
        return path + separator2;

    // If there is not an "alt" separator I add a "normal" one.
    // It means path may be with normal one or it has not any separator
    // (for example if it's just a directory name). In this case I
    // default to normal as users expect.
    return path + separator1;
}

Другие вопросы по теме