Я нашел странное поведение когда использование открытое диалоговое окно файла в c#.
Если используют этот код в Windows XP
текущий рабочий каталог изменяется на путь выбранного файла, однако при выполнении этого кода в Windows 7
текущий рабочий каталог не изменяется.
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(string.Format("Current Directory {0}",Directory.GetCurrentDirectory()), "My Application",MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog and get result.
if (result == DialogResult.OK)
{
}
MessageBox.Show(string.Format("Current Directory {0}", Directory.GetCurrentDirectory()), "My Application", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
Кто-либо знает причину этого поведения? Почему текущий каталог изменяется в XP а не в Windows 7
?
Судя по вашему описанию, значение свойства RestoreDirectory по умолчанию отличается в XP и Windows7. Я не уверен, почему это так, но вы можете решить эту проблему, явно указав значение в своем коде. Установка значения true восстановит каталог при закрытии диалога.
FileDialog (базовый класс OpenFileDialog) имеет свойство AutoUpgradeEnabled, которое контролирует, использует ли диалог преимущества более новых файловых диалогов, которые были внедрены в Vista и более новые операционные системы, когда они доступны. (Внутренне это разница между вызовом GetOpenFileName в comdlg32 и использованием интерфейса IFileDialog).
Причина в том, что новые диалоговые окна поддерживают ряд функций, таких как панель "мест" (см. коллекцию CustomPlaces). Неожиданным побочным эффектом этого является то, что новая реализация IFileDialog не изменяет текущий каталог, в то время как старая версия изменяла.
Это ошибка в реализации файлового диалога и происходит независимо от значения свойства RestoreDirectory
Если вы не хотите использовать новую функциональность файлового диалога, проще всего установить AutoUpgradeEnabled в false.