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

18
задан RRUZ 3 July 2010 в 01:37
поделиться

2 ответа

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

16
ответ дан 30 November 2019 в 08:26
поделиться

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

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

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

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

10
ответ дан 30 November 2019 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: