• Viernes 8 de Noviembre de 2024, 12:32

Autor Tema:  ¿Como saber directorio actual commondialog?  (Leído 7032 veces)

venusita

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
¿Como saber directorio actual commondialog?
« en: Martes 31 de Marzo de 2009, 19:34 »
0
commondialog.  :wacko:
InitDir
Devuelve o establece el directorio de archivos inicial.
 
Sintaxis  objeto.InitDir [= cadena]
 
La sintaxis de la propiedad InitDir consta de las siguientes partes:
 
objeto Nombre que define al CommonDialog
cadena Expresión de cadena que especifica el directorio de archivos inicial.
 
Si no se especifica esta propiedad, se utilizará el directorio actual. .

Lo que necesito saber es como saber cual es ese directorio actual porque yo no utilizo esa propiedad initdir   :no:  , ya que lo tengo que mostrar al iniciar la forma, y debo colocar en un textbox el path
del directorio en que se quedo el commondialog, sin que este haya sido abierto. Es decir abro el cuadro de dailogo selecciono una ruta y un archivo lo abro ya despues cierro mi sistema, llega otro usuario y al abrir el sistema debe aparecer la ultima ruta accesada. ¿Es posible saber el directorio actual de un commondialog?  

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: ¿Como saber directorio actual commondialog?
« Respuesta #1 en: Martes 31 de Marzo de 2009, 22:36 »
0
El directorio actual se obtiene con la función CurDir(unidad).
Debes notar que existe toda una lista de 'directorios' actuales, una por cada unidad, sin embargo para saber la ruta actual de la unidad actual utiliza

Código: Visual Basic
  1. dim rutaActual as string
  2. rutaactual= curdir  ' sin especificación de unidad
  3.  

Puedes establecer una ruta como la actual con ChDir ( ruta) ' change directory
... sin embargo chdir sólo cambia el directorio actual, no la unidad actual, para ello utiliza: ChDrive( unidad) ' change drive

No es buena idea dejar el commondialog sin su initdir, puedes usarlo de esta manera al arrancar el formulario:
Código: Visual Basic
  1.  
  2. ' en el evento load del formulario
  3. if commondialog1.initdir="" then
  4.     commondialog1.initdir= app.path
  5. end if
  6.  
  7.  
Con ello te aseguras que commondialog apunta a la aplicación , luego durante su utilización siemppre podrás cambiarlo.

¿ Por qué conviene utilizar initdir...?  Porque si no cualquier actividad de otra aplicación puede cambiar el directorio actual, resulta estúpido 'bailar' al son de programas ajenos a tu aplicación. supongamos que tu programa trabaja sobre canciones en mp3, y que dichas canciones se localizan en mis documentosmi música... sería pesado para un usuario que acaba de cargar una canción y ha localizado dicha ruta, que la próxima vez tenga que ir desde: f:elProgramaRolloaplicaciónversiónupdate3.6 nuevamente a c:documents and settingsusuriomis documentosmi música

El directorio y la unidad actual es común al S.O. todas las aplicaciones lo pueden utilizar, por ejemplo VB6.0 cuando arranca establece chdir a la ruta donde se localiza (típicamente en: C:Archivos de programaMicrosoft Visual StudioVB98 )

abre el VB6.0 nuevo proyecto escribe ´copia y pega este código...
Código: Visual Basic
  1.  
  2. Private Sub Form_Load()
  3.     MsgBox CurDir
  4.     ChDir ("c:windows")
  5. End Sub
  6.  
  7.  

ejecútalo 1 vez, y te saldrá la ruta que te indiqué antes, ahora para la ejecución del programa (pero no cierres el vb)
ejecútalo nuevamente, ahora te mostrá la ruta que hemos puesto. Como en el código cambiamos la carpeta actual y seguimos en la unidad actual , el msgbox nos lo mostrará... vamos a otro ejemplo...
Para la ejecución del programa, modifica el código al siguiente:
Código: Visual Basic
  1.  
  2. Private Sub Form_Load()
  3.     MsgBox CurDir
  4.     ChDir ("C:Documents and SettingsAdministradorEscritorio")
  5.     ChDrive ("d")
  6. End Sub
  7.  
  8.  
ejecútalo verás que la carpeta nos muestra ahora que es: c:windows (el msgbox está antes del cambio), para la ejecución y...
ejecútalo una vez más, verás que ahora curdir arroja 'd:'  y no c:windows, esta será la ruta actual para la unidad c.. ul último cambio... como hemos cambiado de unidad, antes, nos muestra la ruta actual para la unidad 'd', sino hay establecido un directorio actual para dicha unidad, el directorio actual es igual que la unidad. Para la ejecucíón y modifica el código por este:
Código: Visual Basic
  1.  
  2.    Private Sub Form_Load()
  3.     ChDrive ("c")
  4.     MsgBox CurDir
  5. End Sub
  6.  
  7.  
ejecuta ahora este nuevo cambio, ahora mostrará la ruta que asignamos como actual para la unidad  'c:' (si ninguna otra aplicación lo ha cambiado desde entonces, claro, esto es aplicable siempre), es decir la ruta: C:Documents and SettingsAdministradorEscritorio

Creo que con esto tienes ya suficiente...

p.d.: si no tines más que una unidad, pero tienes algún USB, conéctalo, o si tienes unidad de CDROM, inserta un disco legible (no virgen, ni estroperado). Y si alguna ruta de las mostradas como ejemplo te diera dificultad o no exista en tu equipo, lóogicamente puedes sustituirla por otra...

...con cualquier duda, pregunta...
«Ma non troppo»
----> ModoVacaciones = False<----

venusita

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: ¿Como saber directorio actual commondialog?
« Respuesta #2 en: Martes 31 de Marzo de 2009, 23:52 »
0
Muchas gracias, estuvo interesante toda la explicacion y me ayudo en algo... pero la verdad es que no se pudo resolver mi problema..... ya que al usar el Curdir me regresa una ruta muy distinta a la que muestra al abrir el commondialog....... Pero gracias de todas formas..... :good:

La verdad es que necesito saber la ruta del ultimo directorio en el que se acceso con el commondialog.... por ejemplo.... tengo mi pantalla donde en un boton abro el commanddialog para que el usuario elija de que carpeta desea abrir las tablas, ya que existen las de prueba y originales, y cuando el usuario el que realmente utiliza el sistema no se percata que esta en las tablas de prueba (si muestro la ruta despues de elegir el archivo seleccionado) pero tambien la quieren ver antes de abrir el commandialog....

Gracias  :good:

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: ¿Como saber directorio actual commondialog?
« Respuesta #3 en: Miércoles 1 de Abril de 2009, 08:39 »
0
Cita de: "venusita"
Muchas gracias, estuvo interesante toda la explicacion y me ayudo en algo... pero la verdad es que no se pudo resolver mi problema..... ya que al usar el Curdir me regresa una ruta muy distinta a la que muestra al abrir el commondialog....... Pero gracias de todas formas..... :good:

La verdad es que necesito saber la ruta del ultimo directorio en el que se acceso con el commondialog.... por ejemplo.... tengo mi pantalla donde en un boton abro el commanddialog para que el usuario elija de que carpeta desea abrir las tablas, ya que existen las de prueba y originales, y cuando el usuario el que realmente utiliza el sistema no se percata que esta en las tablas de prueba (si muestro la ruta despues de elegir el archivo seleccionado) pero tambien la quieren ver antes de abrir el commandialog....

Gracias  :good:
Ok.. es que os explicais tan mal que uno debe jugar a adivino.... de hecho tengo todavía entre 2 dudas, ahora te señalo la solución para la primera y después para la segunda, en todo caso, la 2ª requiere de esta primera...

En la 1ª duda que tengo , creo entender que no sabes como obtener la ruta que proporciona el control commondialog..
La ruta del commondialog está en la propiedad filename, la ruta debe ser extraída,

Se pueden usar 2 métodos
A -  puedes usar una función de split usando como divisor la barra "" y luego reunir la matriz excepto el último elemento
Código: Visual Basic
  1.  
  2. Private Sub Form_Load()
  3.     Dim  ruta As String
  4.     Dim rutas() As String
  5.    
  6.     cdlg.ShowOpen
  7.     If cdlg.FileName <> "" Then
  8.         rutas = Split(cdlg.FileName, "")
  9.         ReDim Preserve rutas(0 To UBound(rutas) - 1)
  10.         ruta = Join(rutas, "")  
  11.         MsgBox ruta
  12.     end if
  13. End Sub
  14.  
  15.  

B - O, puedes usar este otro modo: en este modo obtienes por separado el nombre y la ruta

Código: Visual Basic
  1.  
  2. Private Sub Form_Load()
  3.     Dim nombre As String, ruta As String
  4.     cdlg.ShowOpen
  5.     If cdlg.FileName <> "" Then
  6.         nombre = Dir(cdlg.FileName)
  7.         ruta = Mid$(cdlg.FileName, 1, Len(cdlg.FileName) - Len(nombre))
  8.         MsgBox ruta
  9.     End If
  10. End Sub
  11.  
  12.  

Puedes usar un método u otro en función de si necesitas o no por separado el nombre y la ruta, o solo la ruta...

con la 2ª dduda, creo entender, que lo que quieres en realidad es: como puede crear un historial de rutas para mi programa.

Los datos de un programa son temporales, es decir cuando se cierra se descarga todo de la memoria, por tanto si algunos de los datos de estado del programa necesitamos que quede disponible para una nueva aertura, dichos datos deben ser guardados de forma permanente. Para eso esisten los ficheros...

Si ahora he entendido bien, hay 2 métodos:
A -  Cuando el usuario cierre el programa guardar a disco la última ruta utilizada (o las x ultimas distintas), guardas las rutas a un fichero de tipo miprograma.ini, y al abrirlo recuperas esa información y se la adjudicas nuevamente al commondialog en su propiedad initdir.

B -  el otro método es similar, pero en vez de escribir en un fichero ini, escribies entradas al registro. Igualmente, recuperarlas del registro dicha información al iniciar nuevamente el programa.

En estos últimos 10-15 días no se si por casualidad o porqué se ha hablado bastante acerca de ficheros para guardar datos de programas... realiza una búsqueda si necesitas más ayuda, o si tienes alguna duda específica, vuelves a preguntar, pero por favor concreta la pregunta y exponla claramente, que no dé pie a tener que interpretar la exposición... que no somos adivinos...
«Ma non troppo»
----> ModoVacaciones = False<----

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: ¿Como saber directorio actual commondialog?
« Respuesta #4 en: Miércoles 1 de Abril de 2009, 09:11 »
0
La manera de guardar el último directorio y poder acceder de nuevo a este directorio es grabándolo en el registro.

Te muestro un código que uso en mi corrector ortográfico y que puedes colocar en un módulo.

Código: Text
  1. Option Explicit
  2.  
  3. Public gstrWorkDir As String
  4.  
  5. Const mstrThisApp = "MiAplicacion" ' Constante del registro del nombre de la aplicación.
  6. Const mstrWorkDirKey = "Work Dir"         ' Constante del registro para la clave.
  7.  
  8. Sub GetWorkingDir()
  9.     Dim Retval As String
  10.     Dim Key As String
  11.     Dim Default As String
  12.    
  13.     Key = "WorkDir"
  14.     Default = "Not Used"
  15.     Retval = GetSetting(mstrThisApp, mstrWorkDirKey, Key, Default)
  16.     If Retval <> "Not Used" Then
  17.         gstrWorkDir = Retval
  18.     Else
  19.         gstrWorkDir = App.Path  'Directorio de trabajo inicial
  20.     End If
  21. End Sub
  22.  
  23. Sub WriteWorkingDir()
  24.     Dim Key As String
  25.     If LenB(gstrWorkDir) <> 0 Then
  26.         Key = "WorkDir"
  27.         SaveSetting mstrThisApp, mstrWorkDirKey, Key, gstrWorkDir
  28.     End If
  29. End Sub
  30.  

En la variable gstrWorkDir se guarda el nombre del directorio.

Obtienes el directorio de trabajo de la siguiente manera: Posterior a mostrar la ventana del commondialog  con cdlgMain.Action y que obtienes el nombre del archivo con el comando  cdlgMain.FileName escribe la siguientes líneas para grabar el directorio de trabajo:

Código: Text
  1. gstrWorkDir = CurDir
  2. call WriteWorkingDir
  3.  

Faltan detalles pero espero haberte dado la idea.

 :comp: