Подтвердить что ты не робот

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

Я нашел странное поведение при использовании диалога open file в С#.

Если этот код используется в 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?

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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