none
Rutas relativas para acceder a archivos RRS feed

  • Pregunta

  • Hola, en una aplicación WPF y VB.NET no consigo acceder a las imágenes guardadas en una carpeta, solo accedo a las que habia añadido a esa carpeta antes de compilar pero las que añado con la aplicacion en ejecucion no las carga.

    ¿Como compongo la ruta relativa a esa carpeta?

    Gracias.

    martes, 8 de septiembre de 2020 17:24

Respuestas

  • ... y lo cambié por esto

    IMG_PanelImagenes_Imagen.Source = New BitmapImage(New Uri(Environment.CurrentDirectory & "\Imagenes\Articulos\img_1", UriKind.Absolute))

    No es buena idea. Te puede fallar en cualquier momento, dependiendo de cómo lancen tu programa. Fíjate que estás concatenando Environment.CurrentDirectory seguido de tu carpeta. ¿Sabes qué es lo que trae Environment.CurrentDirectory? El lo que Windows llama el "directorio actual" (current), y lo puede establecer el usuario como quiera, con independencia de dónde se encuentre tu programa. Por ejemplo, supongamos que instalas tu programa en una carpeta llamada C:\MisProgramas y que el usuario abre un command prompt y teclea "cd c:\Windows" y desde ahí ejecuta "C:\MisProgramas\TuPrograma.exe". ¿Cuál es el Environment.CurrentDirectory que le llega a TuPrograma.exe? Respuesta: "C:\Windows". No, no es "C:\MisProgramas" como mucha gente parece creer. Esto no solo ocurre desde una ventana de comandos, también se puede cambiar desde el icono del escritorio, y también cambia si tu programa lo lanza otro programa (se toma el currentdirectory del programa que lo lanzó).

    En cuanto a lo del Binding, mi solución preferida es cambiar Source="{Binding img_ruta}" por Source="{Binding img_rutaProcesada}", y dentro de la clase con la que has hecho el Binding añadir una nueva propiedad pública que se llame img_rutaProcesada y que por dentro devuelva img_ruta ya concatenada detrás de la carpeta donde están las imágenes (si es relativa al ejecutable, pon la ruta del ejecutable, no pongas el CurrentDirectory, que NO necesariamente es la ruta del ejecutable aunque en tus pruebas iniciales se haya dado la coincidencia de que por casualidad el CurrentDirectory traía la ruta del ejecutable).


    miércoles, 9 de septiembre de 2020 20:23

Todas las respuestas

  • Hola, en una aplicación WPF y VB.NET no consigo acceder a las imágenes guardadas en una carpeta, solo accedo a las que habia añadido a esa carpeta antes de compilar pero las que añado con la aplicacion en ejecucion no las carga.

    ¿Como compongo la ruta relativa a esa carpeta?

    Gracias.

    hola gabriel puedes publicar el codigo donde no puedes obtener las imagenes??
    martes, 8 de septiembre de 2020 17:30
  • ¿Como compongo la ruta relativa a esa carpeta?

    Es un error bastante clásico intentar utilizar la ruta relativa. No lo hagas. La ruta relativa es relativa al current directory, NO a la carpeta donde está el ejecutable de la aplicación. Esto implica que las rutas relativas pueden fallar en cualquier momento, dependiendo de cómo se haya lanzado la aplicación, porque cambia el current directory.

    En su lugar, utiliza siempre rutas absolutas. Desde luego, puedes construir la ruta absoluta de forma relativa, es decir, puedes concatenar la ruta del ejecutable con la ruta relativa al ejecutable en la que hayas desplegado los archivos a los que quieres acceder. Obviamente, esto implica que sabes dónde has puesto esos archivos relativos al ejecutable.

    martes, 8 de septiembre de 2020 18:01
  •   

    ¿Alguna novedad sobre la consulta realizada? 

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.  

    Eric Ruiz

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    martes, 8 de septiembre de 2020 20:43
    Moderador
  • He conseguido solucionar la parte de vb.net

    'Esto no funcionaba
    IMG_PanelImagenes_Imagen.Source = New BitmapImage(New Uri("\Imagenes\Articulos\img_1", UriKind.Relative))
    
    'y lo cambié por esto
    IMG_PanelImagenes_Imagen.Source = New BitmapImage(New Uri(Environment.CurrentDirectory & "\Imagenes\Articulos\img_1", UriKind.Absolute))

    Lo que no consigo solucionar es la parte del xaml en donde tengo un listview que muestra las imagenes y en el enlace a datos no se como conseguir la ruta completa:

    <Image x:Name="IMG_Imagenes" Source="{Binding img_ruta}" />
    'img_ruta trae la ruta de la imagen guardada en la base de datos, \Imagenes\Articulos\img_x


    miércoles, 9 de septiembre de 2020 7:33
  • ... y lo cambié por esto

    IMG_PanelImagenes_Imagen.Source = New BitmapImage(New Uri(Environment.CurrentDirectory & "\Imagenes\Articulos\img_1", UriKind.Absolute))

    No es buena idea. Te puede fallar en cualquier momento, dependiendo de cómo lancen tu programa. Fíjate que estás concatenando Environment.CurrentDirectory seguido de tu carpeta. ¿Sabes qué es lo que trae Environment.CurrentDirectory? El lo que Windows llama el "directorio actual" (current), y lo puede establecer el usuario como quiera, con independencia de dónde se encuentre tu programa. Por ejemplo, supongamos que instalas tu programa en una carpeta llamada C:\MisProgramas y que el usuario abre un command prompt y teclea "cd c:\Windows" y desde ahí ejecuta "C:\MisProgramas\TuPrograma.exe". ¿Cuál es el Environment.CurrentDirectory que le llega a TuPrograma.exe? Respuesta: "C:\Windows". No, no es "C:\MisProgramas" como mucha gente parece creer. Esto no solo ocurre desde una ventana de comandos, también se puede cambiar desde el icono del escritorio, y también cambia si tu programa lo lanza otro programa (se toma el currentdirectory del programa que lo lanzó).

    En cuanto a lo del Binding, mi solución preferida es cambiar Source="{Binding img_ruta}" por Source="{Binding img_rutaProcesada}", y dentro de la clase con la que has hecho el Binding añadir una nueva propiedad pública que se llame img_rutaProcesada y que por dentro devuelva img_ruta ya concatenada detrás de la carpeta donde están las imágenes (si es relativa al ejecutable, pon la ruta del ejecutable, no pongas el CurrentDirectory, que NO necesariamente es la ruta del ejecutable aunque en tus pruebas iniciales se haya dado la coincidencia de que por casualidad el CurrentDirectory traía la ruta del ejecutable).


    miércoles, 9 de septiembre de 2020 20:23