none
Obtener la ruta completa de un archivo RRS feed

  • Pregunta

  • Buenos días: Necesito obtener la ruta completa de un archivo específico, he utilizado Combine.StartupPath, GetFullPath y GetPathRoot pero sólo obtengo la ruta donde está el ejecutable "C:\Users\RUTA DE LA CARPETA DEL PROYECTO\bin\Debug\Prioridad.png", pero resulta que ahí no está el archivo que busco. En varios foros dan como respuesta el uso de GetFullPath y GetPathRoot pero a mi me da otro resultado.

    Este es el código que utilizo:

     Dim nombreArchivo As String = "Prioridad.png"
     Dim rutaCompleta As String

     rutaCompleta = Path.GetFullPath(nombreArchivo)

    El el nombre del archivo también utilicé "\Prioridad.png" y me devuelve "C:\Prioridad.png"

    Gracias por su ayuda!!


    José Alberto Lira


    viernes, 12 de mayo de 2017 13:29

Respuestas

  • A ver, recapitulemos, que no estaba nada clara la pregunta. Entonces, lo que quieres no es resolver cual es la ruta en la que el programa abrira el fichero dado su nombre, sino que al contrario, conoces la ruta y quieres saber si el fichero realemte esta ahi. en ese caso usa System.IO.File.Exists(rutaCompleta), que te contestara true o false segun que el fichero se encuentre ahi.

    Y en caso de que conteste false por no encontrar el fichero, quieres buscarlo por el systema de archivos a ver si hay una ruta que lo contenga. En ese caso, puedes usar System.IO.Directory(rutaDePartida, nombreDelFicheroSinRuta, SearchOption.AllDirectories). Esto busca en todos los subdirectorios que haya por debajo de "rutaDePartida". Ojo, si no "afinas" un poco sino que pones "C:\" como rutaDePartida, te arriesgas a que tarde muchisimo en responder, en caso de que tenga que buscar en un disco grande com muchos archivos. Y aparte de eso, si hay en disco varios archivos con el mismo nombre, te devolvera todos ellos, y sera tu problema decidir cual de todos es el que realmente deseas usar.

    • Marcado como respuesta JoséAlberto jueves, 18 de mayo de 2017 21:51
    jueves, 18 de mayo de 2017 14:23

Todas las respuestas

  • Si desde tu programa accedes sin más a un archivo poniendo solo su nombre, la ruta desde la que se lee el archivo NO ES la del ejecutable, sino la del CurrentDirectory. Con frecuencia el CurrentDirectory coincide con la ruta del ejecutable, pero no necesariamente es siempre asi.

    Por lo tanto, para obtener la ruta completa en la que el ejecutable buscaria el archivo si lo hubieras llamado solo por su nombre sin poner la ruta, hay que buscar el CurrentDirectory y combinarlo con el nombre del archivo:

    Dim nombreArchivo As String = "Prioridad.png"
    Dim rutaCompleta As String
    
    rutaCompleta = Path.Combine(Directory.GetCurrentDirectory(), nombreArchivo)
    viernes, 12 de mayo de 2017 15:58
  • Si desde tu programa accedes sin más a un archivo poniendo solo su nombre, la ruta desde la que se lee el archivo NO ES la del ejecutable, sino la del CurrentDirectory. Con frecuencia el CurrentDirectory coincide con la ruta del ejecutable, pero no necesariamente es siempre asi.

    Por lo tanto, para obtener la ruta completa en la que el ejecutable buscaria el archivo si lo hubieras llamado solo por su nombre sin poner la ruta, hay que buscar el CurrentDirectory y combinarlo con el nombre del archivo:

    Dim nombreArchivo As String = "Prioridad.png"
    Dim rutaCompleta As String
    
    rutaCompleta = Path.Combine(Directory.GetCurrentDirectory(), nombreArchivo)
    • Gracias por toda tu explicación pero lamentablemente no funciona, me da el mismo resultado que con Combine.StartupPath, GetFullPath y GetPathRoot "C:\Users\RUTA DE LA CARPETA DEL PROYECTO\bin\Debug\Prioridad.png"

    José Alberto Lira

    martes, 16 de mayo de 2017 10:31
  • Hola:

    Lo primero que tienes que hacer es 'buscar' el fichero, puesto que dices que no está en la carpeta del ejecutable, para ello puedes usar el metodo Directory.GetFiles()

    https://msdn.microsoft.com/es-es/library/wz42302f.aspx

    Dim PathBase = Directory.GetCurrentDirectory
    
    Dim Buscar = "Prioridad.png"
    
    Dim Fichero = IO.Directory.GetFiles(PathBase, Buscar, IO.SearchOption.AllDirectories)
    

    Esta función buscará a partir del directorio indicado (PathBase) el fichero en todos los subdirectorios.

    Ten en cuenta que si pones PathBase = "C:\", buscará en todos los directorios pero puede tardar un poco/mucho.

    Un saludo


    • Editado LG DES martes, 16 de mayo de 2017 11:11
    martes, 16 de mayo de 2017 11:09
  • no funciona, me da el mismo resultado que con Combine.StartupPath, GetFullPath y GetPathRoot "C:\Users\RUTA DE LA CARPETA DEL PROYECTO\bin\Debug\Prioridad.png"

    Entonces está funcionando bien. Esa es efectivamente la ruta en la que el programa busca el archivo cuando lo intentas abrir con cualquier funcion que solo use su nombre, por ejemplo, si haces File.ReadAllBytes("Prioridad.png"), entonces el programa va a buscar "C:\Users\RUTA DE LA CARPETA DEL PROYECTO\bin\Debug\Prioridad.png", que es precisamente lo que te ha contestado la llamada.

    Si no era eso lo que desaeabas, tendras que matizar mejor tu pregunta, y explicar que es exactamente lo que quieres obtener.

    martes, 16 de mayo de 2017 12:04
  • Hola Alberto: Bueno al menos para lo que necesito no está funcionando bien. El archivo está en un directorio "X" que, por supuesto, sé cual es y que no es "C:\Users\RUTA DE LA CARPETA DEL PROYECTO\bin\Debug". Lo que quiero hacer es revisar, antes de usar el archivo "Prioridad.png", si éste está en el directorio asignado originalmente y si no está ahí buscarlo donde esté y utilizarlo. Esto es por si, por alguna razón, fue movido de su directorio original y evitar un error en tiempo de ejecución.

    Espero haberme explicado, gracias.


    José Alberto Lira

    jueves, 18 de mayo de 2017 10:01
  • A ver, recapitulemos, que no estaba nada clara la pregunta. Entonces, lo que quieres no es resolver cual es la ruta en la que el programa abrira el fichero dado su nombre, sino que al contrario, conoces la ruta y quieres saber si el fichero realemte esta ahi. en ese caso usa System.IO.File.Exists(rutaCompleta), que te contestara true o false segun que el fichero se encuentre ahi.

    Y en caso de que conteste false por no encontrar el fichero, quieres buscarlo por el systema de archivos a ver si hay una ruta que lo contenga. En ese caso, puedes usar System.IO.Directory(rutaDePartida, nombreDelFicheroSinRuta, SearchOption.AllDirectories). Esto busca en todos los subdirectorios que haya por debajo de "rutaDePartida". Ojo, si no "afinas" un poco sino que pones "C:\" como rutaDePartida, te arriesgas a que tarde muchisimo en responder, en caso de que tenga que buscar en un disco grande com muchos archivos. Y aparte de eso, si hay en disco varios archivos con el mismo nombre, te devolvera todos ellos, y sera tu problema decidir cual de todos es el que realmente deseas usar.

    • Marcado como respuesta JoséAlberto jueves, 18 de mayo de 2017 21:51
    jueves, 18 de mayo de 2017 14:23
  • Gracias Alberto

    José Alberto Lira

    jueves, 18 de mayo de 2017 21:54