vistas varios una todos tipos seleccionar mover los iconos copiar como carpeta archivos archivo abrir c# .net openfiledialog

c# - varios - tipos de vistas en windows



¿Por qué cambia el directorio de trabajo actual cuando se usa el cuadro de diálogo Abrir archivo en Windows XP? (2)

He encontrado un comportamiento extraño cuando uso el diálogo de abrir archivo en c #.

Si usa este código en Windows XP el directorio de trabajo actual cambia a la ruta del archivo seleccionado, sin embargo, si ejecuta este código en Windows 7 el directorio de trabajo actual no cambia.

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); }

¿Alguien sabe la razón de este comportamiento? ¿Por qué el directorio actual cambia en XP y no en Windows 7 ?


FileDialog (la clase base de OpenFileDialog) tiene una propiedad llamada AutoUpgradeEnabled que controla si el diálogo aprovecha los diálogos de archivos más nuevos que se implementaron en Vista y los sistemas operativos más nuevos cuando están disponibles. (Internamente, esta es la diferencia entre llamar a GetOpenFileName en comdlg32 o al usar la interfaz IFileDialog).

La razón para hacer esto es que los cuadros de diálogo más nuevos admiten una serie de características como la barra de "lugares" (consulte la colección CustomPlaces). Un efecto secundario inesperado de esto es que la implementación más reciente de IFileDialog no cambia el directorio actual mientras que la versión anterior sí lo hizo.

Esto es un error en la implementación del diálogo de archivo y ocurre independientemente del valor de la propiedad RestoreDirectory

Si no desea utilizar la nueva funcionalidad de diálogo de archivos, lo más fácil es configurar AutoUpgradeEnabled como falso.


Según su descripción, parece que el valor predeterminado de la propiedad RestoreDirectory es diferente entre XP y Windows7. No estoy seguro de por qué este sería el caso, pero puede solucionar este problema estableciendo explícitamente el valor en su código. Si lo establece en true, se restaurará el directorio en el cuadro de diálogo.