2011-04-19 24 views
5

En el cuadro de diálogo FileOpen o FileSave cuando los llamo, van automáticamente a la última ruta abierta. Esto sucede incluso si cierro mi aplicación y la abro. ¿Pero cómo hacer que esa ruta/nombre de archivo sea un cuadro de texto o una variable?Obtención del último archivo abierto en el cuadro de diálogo de archivo abierto

+0

Ya he probado la propiedad InitialDirectory. Pero no sirve. También necesito el último nombre de archivo abierto ... ¿qué propiedad se puede usar? – Vicky

Respuesta

2

parece un poco weired pero en Windows 7 funciona con la folling:

OpenFileDialog openFileDialog = new OpenFileDialog(); 
openFileDialog.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.MyComputer); 

Pruébalo y dime si necesita más ayuda.

+0

Estoy tratando de obtener el valor no establecido. Necesito obtener el último nombre de archivo abierto. – Vicky

2

Es de suponer que la información se almacena en algún lugar en las profundidades del registro (lo hace el control no administrado al que OpenFileDialog es solo un contenedor). Probablemente lo más fácil sea continuar la ruta la última vez que se cerró el diálogo en su aplicación en algún lugar donde pueda acceder a ella.

+0

Pero tengo un comportamiento extraño, en la aplicación desarrollada en VB .net, el valor en el cuadro de texto se conserva incluso cuando la aplicación está cerrada, pero no en ese estado; se puede abrir en C# – Vicky

+0

El 'OpenFileDialog' no recuerda el último nombre del archivo - solo el último directorio. – ChrisWue

+0

ok al menos cómo obtener el nombre de directorio? – Vicky

1

Tengo un problema similar al de Vicky, que dice lo siguiente. Estoy desarrollando en Visual Basic 2008 Express Edition en Vista Business SP2.

Tengo una aplicación con OpenFileDialog y SaveFileDialog. Cuando llamo a OpenFileDialog al ejecutar por primera vez la aplicación, se establece de manera predeterminada en el directorio desde el que la aplicación abrió/guardó un archivo por última vez. Sin embargo, este directorio NO ES "Environment.CurrentDirectory", que se establece en "C: \ Users \ Brian \ Documents \ Visual Studio 2008 \ Projects \ IFPM Analysis \ IFPM Analysis \ bin \ Debug" y no lo cambia ni OpenFileDialog ni SaveFileDialog.

Más adelante en la aplicación, llamo a SaveFileDialog, con la propiedad de directorio inicial (.InitialDirectory) establecida en el código en un directorio predeterminado. Cuando posteriormente llamo a OpenFileDialog, de manera predeterminada está en el directorio utilizado por SaveFileDialog. Todo el tiempo, el valor de "Environment.CurrentDirectory" no se modifica.

Entonces, mi pregunta es, ¿dónde se está almacenando el directorio que está siendo utilizado por OpenFileDialog y SaveFileDialog? Supongo que tiene algo que ver con la clase FileDialog subyacente, y sé que persiste incluso después de que la aplicación se haya cerrado y reiniciado.

Idealmente, quiero poder almacenar el directorio seleccionado por el usuario desde OpenFileDialog y reiniciarlo después de haber utilizado SaveFileDialog. Aunque puedo usar la propiedad InitialDirectory de OpenFileDialog dentro de la Aplicación, esto no me ayuda cuando cierro la Aplicación y la reinicio. Por desgracia, las acciones de los usuarios típicos son:

  • Aplicación de inicio del archivo abierto
  • con OpenFileDialog
  • guardar el archivo con SaveFileDialog
  • Solicitud licencia

Esto significa que cuando el usuario vuelve a la Aplicación, el directorio predeterminado es el "incorrecto". Sé que puedo guardar el último directorio usado de OpenFileDialog en mi propio archivo de configuración para que persista fuera de la aplicación, pero parece un poco tonto cuando Windows me proporciona la misma funcionalidad, si supiera dónde buscar. !

¡Toda ayuda recibida con gratitud!

Gracias, Brian.

+0

Esto es exactamente lo que quiero :) Enseñé lo mismo con respecto a la idea de guardar detalles en un archivo de configuración ... – Vicky

+1

Ahora tengo una solución. Creé una propiedad en el Objeto My.Settings llamado CurrentDirectory. Luego lo establecí explícitamente en el directorio seleccionado por el usuario cada vez que se llamaba al Diálogo de Archivo (tuve que extraerlo del nombre de archivo seleccionado). También utilicé el método .InitialDirectory de File Dialog para configurar el directorio My.Settings.CurrentDirectory. Esto persiste después de que la aplicación se ha cerrado y por lo tanto resuelve mi problema. Brian. –

+0

Si tiene una pregunta, debe crear otra cadena, no preguntarla en las respuestas. – TheWanderingMind

1

La lista reciente de los archivos abiertos se almacena en 2 lugares:

  • carpeta reciente: La carpeta reciente normalmente se encuentra en C: \ Documents and Settings [su perfil] \ Recent (El camino es diferente en Windows Vista) y contiene accesos directos a los archivos abiertos recientemente.
  • Registro: Cada vez que se selecciona un archivo en el cuadro de diálogo Guardar caja/abierta, se añade el nombre del archivo a la lista de archivos bajo HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU

Este método puede ayudar a obtener la lista:

public static string GetLastOpenSaveFile(string extention) 
    { 
     RegistryKey regKey = Registry.CurrentUser; 
     string lastUsedFolder = string.Empty; 
     regKey = regKey.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU"); 

     if (string.IsNullOrEmpty(extention)) 
      extention = "html"; 

     RegistryKey myKey = regKey.OpenSubKey(extention); 

     if (myKey == null && regKey.GetSubKeyNames().Length > 0) 
      myKey = regKey.OpenSubKey(regKey.GetSubKeyNames()[regKey.GetSubKeyNames().Length - 2]); 

     if (myKey != null) 
     { 
      string[] names = myKey.GetValueNames(); 
      if (names != null && names.Length > 0) 
      { 
       lastUsedFolder = (string)myKey.GetValue(names[names.Length - 2]); 
      } 
     } 

     return lastUsedFolder; 
    } 

¡Éxito! Iordan

Cuestiones relacionadas