Почему текущий рабочий каталог изменяется при использовании диалогового окна "Открыть файл" в Windows XP?

Я обнаружил странное поведение при использовании диалога открытия файла в 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?

2 ответа

Решение

Исходя из вашего описания, звучит так, что значение по умолчанию свойства RestoreDirectory отличается в XP и Windows7. Я не уверен, почему это так, но вы можете решить эту проблему, явно указав значение в своем коде. Установка его в true восстановит каталог при закрытии диалога.

FileDialog (базовый класс OpenFileDialog) имеет свойство AutoUpgradeEnabled, которое определяет, использует ли диалоговое окно преимущества более новых файловых диалогов, которые были внедрены в Vista и более новых операционных системах, когда они доступны. (Внутренне это разница между вызовом GetOpenFileName в comdlg32 или использованием интерфейса IFileDialog).

Причина этого заключается в том, что более новые диалоги поддерживают ряд функций, таких как панель "мест" (см. Коллекцию CustomPlaces). Неожиданным побочным эффектом этого является то, что более новая реализация IFileDialog не меняет текущий каталог, в то время как более старая версия это изменяла.

Это ошибка в реализации диалогового окна файла, которая возникает независимо от значения свойства RestoreDirectory.

Если вы не хотите использовать более новую функцию диалога файлов, проще всего сделать для AutoUpgradeEnabled значение false.

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