none
Acerca de ruta relativa RRS feed

  • Pregunta

  • Estoy desarollando una aplicacion para mostrar jpg y pdf, todo bien hasta que compilo la aplicacion, e probado con environment.currentdirectory, cuurrrent path y algunas otras instrucciones que segun la cocumentacion se usan para saber el directorio en donde se encuentra la aplicacion (.exe) pero todas me dan  una ruta que empieza con "c:\user\......" es mas larga que eso , pero el resultado que yo espero es por ejemplo "c:\supervision" y dentro de esa carpeta tengo otras carpetas como "shape" , "folios/" don de hay archivos pdf

    alguna idea de cual es el problema?

    jueves, 14 de abril de 2016 18:58

Respuestas

  • Hola,

    Para que accedas a la ruta donde está tu .exe usa :

    Dim ruta As String = Application.StartupPath()
    Dim rutaImagen As String = Path.Combine(Application.StartupPath(), "miArchivo.pdf")

    [-] ... pero el resultado que yo espero es por ejemplo "c:\supervision" y dentro de esa carpeta tengo otras carpetas como "shape" , "folios/" don de hay 

    Pero esa ruta no es donde está almacenada tu .exe? o quieres accederla directamente.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 14 de abril de 2016 19:12
  • Hola:

     Podrías explicarte mejor sobre tu situación actual y a donde pretendes llegar.

     Tal cual como lo comentas si necesitas la ruta de ejecución de tu aplicación podrías usar la propiedadApplication.StartupPath, pero esta propiedad te devolverá la ruta completa, osea que si tu aplicación esta dentro de "C:\user\aplicacion\reportes\archivospdf\otracarpeta\" toda la dirección sera devuelta por esta propiedad.

     Si tus archivos .pdf no se encuentran dentro de la misma ubicación que tu archivo .exe entonces de nada servirá que recuperes esta ruta, en este caso, te recomendaría que crearas una lógica especial para ir armando el path de ubicación de tus archivos.

     Ya tus nos dirás como esta tu situación.


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 14 de abril de 2016 20:36
  • Hola:

     Ese directorio normalmente lo utilizan los archivos desplegados mediante ClickOnce, de ahí mi pregunta de hace un rato, si solo estas depurando desde el visual studio y tu proyecto no se encuentra en ese path efectivamente no tiene porque arrojarte ese path pero tampoco es que te afecte, si dentro de ese path colocas las carpetas tu proceso funcionara.


    Saludos desde Monterrey, Nuevo León, México!!!


    • Editado JoséLuisGarcía jueves, 14 de abril de 2016 22:31
    • Marcado como respuesta Hivelos lunes, 18 de abril de 2016 18:59
    jueves, 14 de abril de 2016 22:21
  • Hola:

     Si estas depurando desde el VisualStudio y tienes el path default para los proyectos de visual studio, entonces tu aplicación esta dentro de "C:\Users\nombreusuario\Documents\VisualStudio2010\Projects\nombreProyecto\...\bin\debug", entonces si tu dentro de la carpeta "debug" creas el resto de carpetas para meter tus reportes y demás archivos y realizas una prueba depurando desde el ide de Visual studio, en teoría deberías de poder armar el path de ubicación de tu proyecto y de las carpetas subyacentes hasta ubicar los archivos, cuando distribuyas tu software sugiero que crees un proyecto del tipo Setup para que este despliegue las carpetas y demás archivos dentro del path de ubicación del .exe, una vez instalada la aplicación debería de trabajar exactamente igual que el tiempo de depuración.

     Es lo único que se me ocurre que pudiera solucionar tu problema.


    Saludos desde Monterrey, Nuevo León, México!!!


    • Editado JoséLuisGarcía viernes, 15 de abril de 2016 19:49 ed
    • Marcado como respuesta Hivelos lunes, 18 de abril de 2016 18:59
    viernes, 15 de abril de 2016 19:11
  • Hola:

     Nos hubiéramos evitado muchas vueltas en respuestas y preguntas si hubieras confirmado mi pregunta "Como es que estas distribuyendo la aplicación, ¿acaso estas usando ClickOnce?"  ClickOnce  siempre toma esa ruta para desplegar sus archivos, no me preguntes ¿porque? por que no lo se.

     Ahora, que ClickOnce utilice ese path para desplegar los archivos no significa que tu aplicación no pueda crear un path dentro de "C:/" y mucho menos que no pueda consumir o depositar archivos en la ruta personalizada, eso es completamente independiente.

     Para crear tus rutas personalizadas, podrías valerte del uso de Directory.CreateDirectory Method (String) para realizar esto:

    Ejemplo:

    Imports System
    Imports System.IO
    Imports Microsoft.VisualBasic
    
    Public Class Test
        Public Shared Sub Main()
            ' Specify the directory you want to manipulate.
            Dim path As String = "c:\MyDir"
    
            Try
                ' Determine whether the directory exists.
                If Directory.Exists(path) Then
                    Console.WriteLine("That path exists already.")
                    Return
                End If
    
                ' Try to create the directory.
                Dim di As DirectoryInfo = Directory.CreateDirectory(path)
                Console.WriteLine("The directory was created successfully at {0}.", Directory.GetCreationTime(path))
    
                ' Delete the directory.
                di.Delete()
                Console.WriteLine("The directory was deleted successfully.")
    
            Catch e As Exception
                Console.WriteLine("The process failed: {0}.", e.ToString())
            End Try
        End Sub
    End Class

     Una vez creada la ruta apuntas tu lógica a el y listo, tu aplicación puede trabajar sin problemas aunque el .exe este ubicado en la carpeta por default de clickonce.

     Otra cosa, considera contratar un servicio de hospedaje para publicar tu proyecto ClickOnce y que este sea accesible desde internet, ya que muchas veces se presentan errores en producción que requieren sean resueltas en un tiempo corto y el echo de tener que grabar y entregar un CD por cada instalación resulta tardado y estresante (esto desde mi punto de vista).

    Nota: Si las respuestas que se te ofrecen son las adecuadas o resuelven o ayudan a resolver tu problema por favor, no olvides marcarlas como tales y votarlas como útiles.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta Hivelos lunes, 18 de abril de 2016 19:00
    lunes, 18 de abril de 2016 18:26

Todas las respuestas

  • Hola,

    Para que accedas a la ruta donde está tu .exe usa :

    Dim ruta As String = Application.StartupPath()
    Dim rutaImagen As String = Path.Combine(Application.StartupPath(), "miArchivo.pdf")

    [-] ... pero el resultado que yo espero es por ejemplo "c:\supervision" y dentro de esa carpeta tengo otras carpetas como "shape" , "folios/" don de hay 

    Pero esa ruta no es donde está almacenada tu .exe? o quieres accederla directamente.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 14 de abril de 2016 19:12
  • Hola:

     Podrías explicarte mejor sobre tu situación actual y a donde pretendes llegar.

     Tal cual como lo comentas si necesitas la ruta de ejecución de tu aplicación podrías usar la propiedadApplication.StartupPath, pero esta propiedad te devolverá la ruta completa, osea que si tu aplicación esta dentro de "C:\user\aplicacion\reportes\archivospdf\otracarpeta\" toda la dirección sera devuelta por esta propiedad.

     Si tus archivos .pdf no se encuentran dentro de la misma ubicación que tu archivo .exe entonces de nada servirá que recuperes esta ruta, en este caso, te recomendaría que crearas una lógica especial para ir armando el path de ubicación de tus archivos.

     Ya tus nos dirás como esta tu situación.


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 14 de abril de 2016 20:36
  • Gracias por su pronta respuesta.

    Estoy usando visual basic express 2010

    escribo el codigo para obtener la ruta como lo comentan, realice una copia de las carpetas donde tengo mis jpg,pdf dentro de Bin para que al ejecutar la aplicacion en el IDE encuentre las carpetas y todo bien, pero al compilar y ejecutar desde

    G:\Supervision aqui el sup2015.exe y carpetas de shape, jpg, pdf

    es donde esta el exe

    esperaria g:\SUPERVISION\" agrego & "SHAPE\" AQUI AGREGO & "ETAPA_1_2.SHP" Y CARGO LA CAPA EN AXMAP

    SOLO QUE LA EJECUCION DEL .EXE ME DA COMO RESULTADO DE LA RUTA "C:\USUARIO\......"

    E USADO CURRENTPATH, GETLOGICALDRIVER, currentdirectory,startuppath Y EL RESULTADO AL EJECUTAR EL .EXE ES EL MISMO

    con msgbox veo la ruta que me genera y siempre es la misma

    Espero describir bien mi problema


    • Editado Hivelos jueves, 14 de abril de 2016 21:25
    jueves, 14 de abril de 2016 21:18
  • Hola:

     Como es que estas distribuyendo la aplicación, ¿acaso estas usando ClickOnce?, si es asi recuerda que los archivos se despliegan en un path dentro de User.

     Si estas distribuyendo la aplicacion mediante un Setup y al descromprimir los archivos el Setup te los despliega dentro de C:\Supervision\ entonces has una prueba ejecutando el .exe que esta dentro de este path para ver que direccion te retorna.

    E USADO CURRENTPATH, GETLOGICALDRIVER, currentdirectory,startuppath Y EL RESULTADO AL EJECUTAR EL .EXE ES EL MISMO

     Entonces es problema de la lógica, pero con la escasa información que proporcionas no logro darme una idea de como llegar al origen del problema, te agradecería si acompañas la explicación con alguna imagen y el fragmento de código que tratas de implementar.


    Saludos desde Monterrey, Nuevo León, México!!!


    jueves, 14 de abril de 2016 21:26
  • El desarrollo incluye Axmap con control Activex para manejo de informacion SIG cargando una capa de puntos,  mostrar archivos PDF, y jpg ademas de procesamiento de base de datos .accdb para hacer estadisticas...etc

    el sistema se pretende distribuir en cd's 

    mi codigo actual despues de haber probado otras instrucciones vb y metodos es 

      Try
                AxMap1.RemoveAllLayers()
                AxMap2.RemoveAllLayers()
                AxMap1.Projection = tkMapProjection.PROJECTION_WGS84
                AxMap2.Projection = tkMapProjection.PROJECTION_WGS84


                filename = Path.Combine(Environment.CurrentDirectory, "Shape\ag_2015_etapa_1_2.shp")

                MsgBox("ruta :" & filename)
                'filename = "C:\SUPERVISION SAGARPA 2015\AG_2015_Etapa 1 y 2\ag_2015_etapa_1_2.shp"
                sf = New Shapefile
                sf1 = New Shapefile

    de momento estoy probando en c:\supervision

    hago la compilacion el resultado es

    una carpeta Application Files

    setup

    supervision.exe

    ejecuto supervision.exe

    y el path que me genera es

    "c:\Users\colmern\appData\Local\Apps\2.0\............mas carpetas \shape\ag_2015_etapa1_2.shp"

    el resultado esperado seria c:\Supervision\ aqui agrego mis directorios y el nombre de archivo que deseo abrir

    disculpa la falta de imagen, no supe como pegar un printscreen en esta ventana

    gracias de antemano

    

    

    jueves, 14 de abril de 2016 22:02
  • Hola:

     Ese directorio normalmente lo utilizan los archivos desplegados mediante ClickOnce, de ahí mi pregunta de hace un rato, si solo estas depurando desde el visual studio y tu proyecto no se encuentra en ese path efectivamente no tiene porque arrojarte ese path pero tampoco es que te afecte, si dentro de ese path colocas las carpetas tu proceso funcionara.


    Saludos desde Monterrey, Nuevo León, México!!!


    • Editado JoséLuisGarcía jueves, 14 de abril de 2016 22:31
    • Marcado como respuesta Hivelos lunes, 18 de abril de 2016 18:59
    jueves, 14 de abril de 2016 22:21
  • no estoy familiarizado con el termino Cickonce? deja lo checo por lo demas y  teóricamente así lo veo, lo que necesito hacer es una carpeta cualquier nombre ahi poner el exe, ahi mismo las carpetas que se necesiten para extraer informacion: la aplicacion debe partir desde la ubicacion fisica del exe para solicitar carpetas y archivos

    ejemplo

    Cualquier unidad c:, g: , f:... etc

    carpeta  : \Supervision aquí el exe, carpeta "Shape", Carpeta de documentos pdf, carpeta de imágenes jpg , carpeta de archivo accdb:

    mi procedimiento es:

    desarrollo en el IDE visual basic expres 2010

    una ves hecha la depuración, hago la compilación y publicación

    la aplicación y carpetas las llevo a un disco duro dentro de una carpeta con el mismo nombre "Supervision", ejecuto el exe en otro equipo y sas, da el mismo error en lugar de tomar la unidad y carpeta donde esta el ejecutable (exe)  busca en c:... ruta que es la misma que ya les comente.

    nota: ya probe con la ubicacion fisica del exe dentro de una carpeta y en otros equipos

    he probado tanto 

    Directory.GetCurrentDirectory(),

    My.Application.Info.DirectoryPath

    Path.Combine(Application.StartupPath, "files\file1.txt")

    dim miarchivo as string=path+"\carpeta\archivo.txt",

    en todas me da el mismo resultado u no se si me esten faltando algunas librerias o algo

    .....en este momento no tengo idea, sigo buscando documentacion pero no encuentro aun nada que me de la pista de lo que esta sucediendo

    gracias por su interes ,, se que no he dado bien los elementos para que lo analicen pero estoy en eso

    de nuevo gracias

    viernes, 15 de abril de 2016 18:53
  • Hola:

     Si estas depurando desde el VisualStudio y tienes el path default para los proyectos de visual studio, entonces tu aplicación esta dentro de "C:\Users\nombreusuario\Documents\VisualStudio2010\Projects\nombreProyecto\...\bin\debug", entonces si tu dentro de la carpeta "debug" creas el resto de carpetas para meter tus reportes y demás archivos y realizas una prueba depurando desde el ide de Visual studio, en teoría deberías de poder armar el path de ubicación de tu proyecto y de las carpetas subyacentes hasta ubicar los archivos, cuando distribuyas tu software sugiero que crees un proyecto del tipo Setup para que este despliegue las carpetas y demás archivos dentro del path de ubicación del .exe, una vez instalada la aplicación debería de trabajar exactamente igual que el tiempo de depuración.

     Es lo único que se me ocurre que pudiera solucionar tu problema.


    Saludos desde Monterrey, Nuevo León, México!!!


    • Editado JoséLuisGarcía viernes, 15 de abril de 2016 19:49 ed
    • Marcado como respuesta Hivelos lunes, 18 de abril de 2016 18:59
    viernes, 15 de abril de 2016 19:11
  • Gracias, lo voy a revisar y crear proyecto como lo comentas, y ya les diré como va todo
    viernes, 15 de abril de 2016 22:21
  • Ya  hice pruebas y efectivamente el código es correcto como lo han mencionado, entonces el procedimiento para compilar que estoy siguiendo no es el correcto como lo menciona Jose Luis García el asunto va por el lado del uso de ClickOnce, pero entonces  como hacer la compilación de este proyecto, estoy leyendo la documentación que he encontrado al respecto y aun no encuentro como cambiar la ubicación "C:\users\.... etc" por una ubicación personalizada, el sistema sera distribuido en cd's y me gustaría que al insertar el cd se ejecute un setup para instalarlo, ya sea desde el mismo CD o alguna ubicación que el usuario elija....

    Las pruebas que he hecho me indican que al ejecutar el setup e instalar el sistema la ubicación de la aplicación la lleva al directorio mencionado, aunque me desconcierta que el .exe queda en la carpeta personalizada

    intente insertar imagen de 18.2 kb pero no cargó , la carpeta de resultados de la compilación es 

    "C:\Sup2015": aqui quedan las carpetas Application Files, Supervision y Supervision.exe y Setup

    Puede ser otro tema, si así lo consideran primero buscaría si es un tema ya tratado antes de abrir otra pregunta

    Mil gracias de antemano


    Hivelos


    • Editado Hivelos lunes, 18 de abril de 2016 18:09
    lunes, 18 de abril de 2016 18:07
  • Hola:

     Nos hubiéramos evitado muchas vueltas en respuestas y preguntas si hubieras confirmado mi pregunta "Como es que estas distribuyendo la aplicación, ¿acaso estas usando ClickOnce?"  ClickOnce  siempre toma esa ruta para desplegar sus archivos, no me preguntes ¿porque? por que no lo se.

     Ahora, que ClickOnce utilice ese path para desplegar los archivos no significa que tu aplicación no pueda crear un path dentro de "C:/" y mucho menos que no pueda consumir o depositar archivos en la ruta personalizada, eso es completamente independiente.

     Para crear tus rutas personalizadas, podrías valerte del uso de Directory.CreateDirectory Method (String) para realizar esto:

    Ejemplo:

    Imports System
    Imports System.IO
    Imports Microsoft.VisualBasic
    
    Public Class Test
        Public Shared Sub Main()
            ' Specify the directory you want to manipulate.
            Dim path As String = "c:\MyDir"
    
            Try
                ' Determine whether the directory exists.
                If Directory.Exists(path) Then
                    Console.WriteLine("That path exists already.")
                    Return
                End If
    
                ' Try to create the directory.
                Dim di As DirectoryInfo = Directory.CreateDirectory(path)
                Console.WriteLine("The directory was created successfully at {0}.", Directory.GetCreationTime(path))
    
                ' Delete the directory.
                di.Delete()
                Console.WriteLine("The directory was deleted successfully.")
    
            Catch e As Exception
                Console.WriteLine("The process failed: {0}.", e.ToString())
            End Try
        End Sub
    End Class

     Una vez creada la ruta apuntas tu lógica a el y listo, tu aplicación puede trabajar sin problemas aunque el .exe este ubicado en la carpeta por default de clickonce.

     Otra cosa, considera contratar un servicio de hospedaje para publicar tu proyecto ClickOnce y que este sea accesible desde internet, ya que muchas veces se presentan errores en producción que requieren sean resueltas en un tiempo corto y el echo de tener que grabar y entregar un CD por cada instalación resulta tardado y estresante (esto desde mi punto de vista).

    Nota: Si las respuestas que se te ofrecen son las adecuadas o resuelven o ayudan a resolver tu problema por favor, no olvides marcarlas como tales y votarlas como útiles.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta Hivelos lunes, 18 de abril de 2016 19:00
    lunes, 18 de abril de 2016 18:26
  • Agradezco la ayuda de todos y la observacion de Jose luis, aunque no estoy totalmente familiarizado con el termino Clickonce y por eso no podia responder en el momento.

    gracias y manos a la obra a implementar la solucion

    Gracias, Mil gracias


    Hivelos

    lunes, 18 de abril de 2016 19:44