Principales respuestas
Obtener la ruta completa de un archivo

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
- Editado JoséAlberto viernes, 12 de mayo de 2017 13:37
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
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)
- Propuesto como respuesta Brayan De La Cruz viernes, 12 de mayo de 2017 16:28
- Votado como útil Joyce_ACModerator viernes, 19 de mayo de 2017 19:11
-
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
-
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
-
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.
- Propuesto como respuesta Joyce_ACModerator martes, 16 de mayo de 2017 18:28
- Votado como útil Joyce_ACModerator viernes, 19 de mayo de 2017 19:11
-
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
-
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
-