Есть ли способ запустить OpenFileDialog
в папке ?Могу ли я запустить OpenFileDialog DotNet в C: Users Public Documents?
Я пишу приложение C#, используя структуру DotNet. Я пытаюсь запустить OpenFileDialog
, с InitialDirectory
от "C:\\Users\\Public\\Documents\\"
и FileName
от "world.txt"
. К сожалению, OpenFileDialog
помещает меня в ярлык Documents
вместо C:\Users\Public\Documents
.
Ожидаемые результаты
Я ожидаю увидеть OpenFileDialog открытым, с верхней текстовое поле, показывая > This PC > Windows7_OS (C:) > Users > Public > Documents
и нижней текстовое поле, показывая world.txt
. Я ожидаю, что если я нажму в верхнем текстовом поле, он отобразит C:\Users\Public\Documents
.
Фактические результаты
открывается OpenFileDialog. Верхнее текстовое поле показывает > This PC > Documents
, а нижнее текстовое поле показывает world.txt
. Если я нажимаю в верхнем текстовом поле, он показывает Documents
. Отображаемое содержимое папки не так же, как и содержимое C:\Users\Public\Documents
.
Вещи, которые я попробовал
я остановил свой код в Visual Studio отладчик после следующей строки кода:
OpenFileDialog dlg = new OpenFileDialog();
В окне Immediate, я выполнил код, такой как:
dlg.FileName = "world.txt"
? dlg.FileName
dlg.InitialDirectory = "C:\\NonExistentDirectory\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\Users\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\Users\\Public\\";
dlg.ShowDialog();
dlg.InitialDirectory = "C:\\Users\\Public\\Documents\\";
dlg.ShowDialog();
Я отменяю из каждого диалога.
Я использовал C:\WINDOWS\System32\cmd.exe
к cd
между C:\
и C:\Users\
и C:\Users\Public
и C:\Users\Public\Documents\
.
Результаты вещей, которые я пытался
Когда
dlg.InitialDirectory = "C:\\NonExistentDirectory\\"
, папка для диалога изначально отображаются вThis PC > Documents > Visual Studio 2015 > Projects > SimpleGame > Controller > bin > Debug"
. Щелчок в текстовом поле вызывает его отображениеC:\Users\Owner\Documents\Visual Studio 2015\Projects\SimpleGame\Controller\bin\Debug
. Поэтому я предполагаю, чтоOpenFileDialog
бесшумно обрабатывает недопустимыйInitialDirectory
, не меняя каталогов. В этом случае он по умолчанию совпадает с папкойDebug
в сборке моего проекта.Когда
dlg.InitialDirectory
является"C:\\"
или"C:\\Users\\"
или"C:\\Users\\Public\\"
диалоговые ведет себя, как ожидалось. Щелчок в верхнем текстовом поле производитC:\
илиC:\Users
илиC:\Users\Public
соответственно.Когда
dlg.InitialDirectory = "C:\\Users\\Public\\Documents\\"
диалог ведет себя некорректно. Верхнее текстовое поле показывает> This PC > Documents
, а нижнее текстовое поле показываетworld.txt
. Если я нажимаю в верхнем текстовом поле, он показываетDocuments
.Отображаемое содержимое папки не так же, как и содержимоеC:\Users\Public\Documents
.Использование
cmd.exe
позволяет мнеcd
между папками как ожидалось, в том числе вC:\Users\Public\Documents
.
Моя среда
Я бегу Microsoft Visual Studio Community 2015 Версия 14.0.23107.0 D14REL, с помощью Microsoft Visual C# 2015 Моя операционная система является ОС Windows 10 Pro.
может быть привилегия вещь? вы пробовали работать против администратора? – Noctis
Я также использую Windows 10 Pro и могу подтвердить это поведение. Обратите внимание: если вы используете 'dlg.InitialDirectory = 'C: \\ Users \\ Public \\ Music \\"; 'или' dlg.InitialDirectory = $ "C: \\ Users \\ {Environment.UserName} \\ Documents \\ ";", тогда диалог откроется в соответствующей библиотеке. Однако, если вы укажете путь к каталогу, который является частью настраиваемой библиотеки, диалоговое окно открывается в этот физический каталог. Возможно, диалог пытается быть «умным» при открытии в каталог, который является частью библиотеки с ['KNOWNFOLDERID'] (https://msdn.microsoft.com/library/windows/desktop/dd378457.aspx). – BACON
Вы пытались восстановить каталог с помощью 'Environment.GetFolderPath (Environment.SpecialFolder.CommonDocuments)'? –