2009-05-30 16 views
15

¿Por qué OpenFileDialog cambia mi directorio de trabajo? ¿Debo asumir muchas funciones en System.Windows.Forms cambiará mi directorio de trabajo?¿Por qué OpenFileDialog cambia mi directorio de trabajo?

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 

Respuesta

6

El directorio de trabajo actual puede cambiar durante el tiempo de ejecución, sí.

considerar el uso de

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

o

System.AppDomain.CurrentDomain.BaseDirectory 

cuando se necesita su directorio de aplicaciones.

+0

je, no es tan fácil. Solo uso get/set cuando lo necesito. Uso MSVS para establecer el directorio de trabajo, por lo que no hay forma posible de que detecte dónde debería estar (a menos que lo codifique en el exe) –

7

Es un dolor, aunque de alguna manera usted podría anticiparlo ... si entra en un cuadro de diálogo abierto varias veces (en una aplicación) a menudo lo encontrará donde lo dejó por última vez.

Si afecta su código, puede tomar una instantánea de GetCurrentDirectory() antes de entrar en el cuadro de diálogo y restaurarlo después (para que su código no vea el cambio). Es posible que desee almacenar el directorio de trabajo del usuario por separado (y cambiarlos) para que el usuario también obtenga su comportamiento esperado.

+0

Eso es exactamente lo que hice. Fue sorprendente ver que sucedió. Me alegro de verte pensar que es un dolor también. –

+0

El hecho de que OpenFileDialog abra la misma carpeta la próxima vez que ingrese en la misma aplicación no tiene nada que ver con el hecho de que establece el directorio actual. Se trata de algunas ventanas compiladas en la magia para recordar el último directorio de esos cuadros de diálogo (probablemente en algún lugar del registro). – ChrisWue

8

Lo que hemos descubierto en un proyecto actual es que OpenFileDialog ya no cambia el directorio actual, por lo que la propiedad .RestoreDirectory está obsoleta. El código en la aplicación utilizada para cambiar el directorio actual cada vez que abrimos un archivo (cuando se ejecuta en Windows XP). Ya no hace eso en Windows 7. Como resultado, rompió nuestra aplicación porque ahora nuestro conjunto de datos no sabe en qué directorio se encuentra el archivo cuando intentamos deserializarlo usando el nombre de archivo sin la ruta completa. Solo una palabra de advertencia si planea migrar a Windows 7.

+2

buen señor, acabo de encontrar este comentario después de haber luchado con esta locura durante aproximadamente 3 horas, tratando de entender por qué diablos estaba teniendo diferentes comportamientos en XP y Windows 7 para un diálogo de archivo freaking. – Galactus

+0

Me preguntaba por qué ejecutar. \ Foo.exe no funcionó en XP :) – paulm

0

para Por qué en XP el archivo de diálogo cambia el directorio actual, es mejor preguntarle a MS. de todos modos, el diálogo de archivo abierto en XP tiene este extraño comportamiento, pero en w7 o superior no. por lo que puede simplemente configurar el directorio actual después de guardar la ruta seleccionada desde SaveFileDialog hasta que cambie el directorio actual.

fijo mi método en el que se puede ver que el camino chosed se guarda en los ajustes y recuperar el directorio actual

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

    } 
+0

Esto no responde a la pregunta. OP quería saber ** ¿POR QUÉ ** – lokusking

+0

Creo que sí – luka

+0

1) Las otras respuestas dicen que todo lo que se necesita decir 2) XP ya no es más como soporte OS 3) La pregunta es 7 años ¿por qué estás respondiendo? –

Cuestiones relacionadas