Почему OpenFileDialog меняет рабочий каталог?

Почему OpenFileDialog меняет рабочий каталог? Должен ли я предположить, что многие функции в System.Windows.Forms изменят мой рабочий каталог?

OpenFileDialog open = new OpenFileDialog(); open.Filter = filter; a = Directory.GetCurrentDirectory(); //<-- correct if (open.ShowDialog() == DialogResult.OK) //-- select a file on my desktop { a = Directory.GetCurrentDirectory(); //<-- incorrect, is set to my desktop 

Или вы можете сделать это не так. См. Свойство FileDialog.RestoreDirectory .

То, что мы обнаружили в текущем проекте, состоит в том, что OpenFileDialog больше не изменяет текущий каталог, что делает свойство .RestoreDirectory устаревшим. Код в приложении, используемый для изменения текущего каталога всякий раз, когда мы открываем файл (при работе в Windows XP). Это больше не работает в Windows 7. В результате это нарушило наше приложение, потому что теперь наш dataset не знает, в какой директории находится файл, когда мы пытаемся десериализировать его, используя имя файла без полного пути. Просто предостережение, если вы планируете перейти на Windows 7.

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

Если это повлияет на ваш код, вы можете сделать снимок GetCurrentDirectory() перед тем, как войти в диалог, и затем восстановить его (так что ваш код не видит изменения). Возможно, вам захочется сохранить рабочий каталог пользователя отдельно (и поменять их), чтобы пользователь также получил ожидаемое поведение.

Текущий рабочий каталог может измениться во время выполнения, да.

Рассмотрите возможность использования

 Directory.GetParent(Assembly.GetExecutingAssembly().Location) 

или

 System.AppDomain.CurrentDomain.BaseDirectory 

когда вам нужен каталог приложений.

for Почему в XP filedialog меняет текущий каталог, лучше спросить MS. так или иначе, диалог открытия файла в XP имеет это странное поведение, но в w7 или выше нет. поэтому вы можете просто установить текущий каталог после сохранения пути, выбранного из SaveFileDialog, чтобы изменить текущий каталог.

Я отправляю свой метод, когда вы можете видеть, что пройденный путь сохраняется в настройках и восстанавливает текущий каталог

  private void ShowSaveFileDialog(object sender, RoutedEventArgs e) { private const int xpVerMajorNumber = 5; var saveFileDialog = new SaveFileDialog() { FileName = Settings.Default.ExcelFileName, DefaultExt = "*.xlsx", Filter = "Excel Workbook (.xlsx)|*.xlsx" }; if (saveFileDialog.ShowDialog(this) == true) Settings.Default.ExcelFileName = saveFileDialog.FileName; if (Environment.OSVersion.Version.Major <= xpVerMajorNumber) { Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory); } } 
Давайте будем гением компьютера.