OpenFileDialog InitialDirectory не работает - PullRequest
6 голосов
/ 11 января 2012

У меня есть этот код:

OpenFileDialog dialog = new OpenFileDialog();
dialog.InitialDirectory = GetDataPath(...);
dialog.AutoUpgradeEnabled = false;
dialog.Filter = GetFilter(...);
if (dialog.ShowDialog(this) == DialogResult.OK)
{...}

Я ожидаю, что при каждом запуске диалоговое окно будет находиться в одной папке - папке GetDataPath (...), но оно остается в последней выбранной папке.

Это правильное поведение? Вы знаете, как это исправить? Если Windows сохраняет последний использованный путь в реестре, знаете ли вы, как его найти?

EDIT1:

С:

dialog.AutoUpgradeEnabled = true;

работает как положено ...

EDIT2: та же проблема, что и здесь Любые известные проблемы с получением свойства InitialDirectory SaveFileDialog, работающего в Windows 7?

Ответы [ 11 ]

6 голосов
/ 13 января 2014

Не включать имя файла в InitialDirectory.Только путь.

Из msdn : В Windows Vista, если для InitialDirectory задано полное имя файла, а не просто путь к каталогу, в качестве исходного каталога будет использоваться путь к приложению илив каталог, из которого пользователь последний раз выбирал файл.

3 голосов
/ 30 марта 2015

мне эти ответы не помогли (windows 7).

мой путь выглядел так: «C: / xxxx / yyyyy» после переключения на обратную косую черту он работал нормально, теперь мой путь выглядит так: «C: \ xxxxx \ yyyyy»

3 голосов
/ 11 января 2012

Может потребоваться установить RestoreDirectory

OpenFileDialog dialog = new OpenFileDialog();
dialog.InitialDirectory = GetDataPath(...);
dialog.RestoreDirectory = true;
dialog.AutoUpgradeEnabled = false;
dialog.Filter = GetFilter(...);
if (dialog.ShowDialog(this) == DialogResult.OK)
{...}

Проверить эту ссылку

1 голос
/ 20 июня 2013

Я тоже пробовал разные «решения», найденные в разных местах, но ни одно из них, похоже, не работает, как только в реестре есть запись списка MRU: / Но вот мой собственный простой обходной путь…

Вместо установки свойства диалога InitialDirectory, установите свойство FileName для вашего пути, но в сочетании с выбранным Filter, например:

dialog.FileName = Path.Combine(myPath, "*.*");
1 голос
/ 03 октября 2012

Я получил код для работы следующим образом:

dialog.InitialDirectory = Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%") + "\\Videos";

0 голосов
/ 03 марта 2017

Я попробовал данные решения, но безуспешно, но для меня сработало удаление "/" с моего пути.

path = path.TrimEnd(new char[] { '\\' });

Тогда все работает правильно.

0 голосов
/ 02 мая 2016

В моем случае это не работало, потому что 'InitialDirectory' не существовало.

    if (!Directory.Exists(InitialDirectory))
        Directory.CreateDirectory(InitialDirectory);
0 голосов
/ 29 июня 2015

Это происходило со мной, но проблема была в другом. У меня была опечатка на пути, который я использовал для InitialDirectory. Когда я исправил это, я был в порядке. Если это происходит с вами, проверьте это в окне вывода:

A first chance exception of type 'System.IO.FileNotFoundException' 
occurred in System.Windows.Forms.dll
0 голосов
/ 04 июня 2015

У меня тоже была проблема, когда показывался только последний использованный каталог. Я использовал сетевой путь без буквы диска. Мне нужно было добавить еще один "\" перед именем сервера.

Это не сработало:

openFileDialog1.InitialDirectory = "\\\servernam01\\group.data\\EXTERNAL PROJECTS\\VSCHART\\ercotfiles\\";

Но это сработало:

openFileDialog1.InitialDirectory = "\\\\servernam01\\group.data\\EXTERNAL PROJECTS\\VSCHART\\ercotfiles\\";
0 голосов
/ 28 ноября 2014

У меня была такая же проблема. Когда я использовал этот код:

string imgPath = AppDomain.CurrentDomain.BaseDirectory + @"Images\";

Это не показывает начальный каталог.

Но если я уберу последний слеш:

string imgPath = AppDomain.CurrentDomain.BaseDirectory + @"Images";

Так начал показывать начальный каталог правильно. Восстановление обратной косой черты не вызывает некорректного показа, чего я не понимаю, но это так.

...