Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Legnak en 21 Enero 2014, 20:08 pm



Título: como accedo al directorio raiz?
Publicado por: Legnak en 21 Enero 2014, 20:08 pm
Hola, me gustaria que me dijesen como puedo utilizar el directorio raiz, me refiero al sitio donde esta el programa, que procedimiento debo usar?
por si no entienden es que lo necesito para abrir algunos PDF que he puesto en el mismo directorio del exe y quisiera saber cual es su directorio

Saludos


Título: Re: como accedo al directorio raiz?
Publicado por: .:Weeds:. en 21 Enero 2014, 21:11 pm
Hola, me gustaria que me dijesen como puedo utilizar el directorio raiz, me refiero al sitio donde esta el programa, que procedimiento debo usar?
por si no entienden es que lo necesito para abrir algunos PDF que he puesto en el mismo directorio del exe y quisiera saber cual es su directorio

Saludos
Código
  1. Dim path As String
  2. path = System.IO.Path.GetDirectoryName( _
  3. System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)

Fuente: http://msdn.microsoft.com/en-us/library/aa457089.aspx (http://msdn.microsoft.com/en-us/library/aa457089.aspx)

Edito: El otro metodo no lo he probado asi que te dejo otro mas facil.
Código
  1. Private ReadOnly DirectorioActual As String = Directory.GetCurrentDirectory()

Saludos.


Título: Re: como accedo al directorio raiz?
Publicado por: Legnak en 21 Enero 2014, 22:11 pm
gracias!


Título: Re: como accedo al directorio raiz?
Publicado por: El Benjo en 21 Enero 2014, 22:46 pm
tambien prueba usando:

Código
  1. Dim Directorio As string
  2. Directorio = Application.StartupPath


Título: Re: como accedo al directorio raiz?
Publicado por: Eleкtro en 21 Enero 2014, 22:49 pm
Hola

No es lo mismo el directorio de trabajo actual (WirkingDirectory), que el directorio donde se encuentra el ensamblado, ya que el primero no es estático y se puede modificar.

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
EDITO: Lo que dijo el compañero El Benjo es lo correcto.

Para obtener el directorio de inciio de la aplicación puedes utilizar este método:
Código
  1. Application.StartupPath

Y para averiguar el directorio de trabajo actual...bueno, esto es complétamente innecesario a menos que modifiques intencionadamente el directorio de trabajo en algun lugar del código y que por ese motivo debas controlar los cambios de directorio.

...Por ejemplo:

Código
  1. Dim Archivo As String = "Archivo.pdf"

...al momento que vayas a usar la variable Archivo para ejecutarlo, cargarlo, pasarlo como parámetro a un método, o lo que estés haciendo, ya se toma en cuenta el directorio de trabajo actual, porque ese es el directorio actual.

Es decir, lo de arriba, es exáctamente lo mismo que hacer esto:

Código
  1. Dim Archivo As String = IO.Path.Combine(IO.Directory.GetCurrentDirectory, "Archivo.pdf")
  2. Dim Archivo As String = IO.Path.Combine(Application.StartupPath, "Archivo.pdf")
  3. Dim Archivo As String = IO.Path.Combine(My.Application.Info.DirectoryPath, "Archivo.pdf")
  4. Dim Archivo As String = IO.Path.Combine(CurDir(), "Archivo.pdf")
  5. Dim Archivo As String = ".\Archivo.pdf"
  6.  
  7. Dim DirectorioActual As String = "" ' Nada

Así que se puede decir que no necesitas especificar el directorio de trabajo.

Saludos!


Título: Re: como accedo al directorio raiz?
Publicado por: Legnak en 21 Enero 2014, 23:26 pm
gracias a todos por sus respuestas  ;D


Título: Re: como accedo al directorio raiz?
Publicado por: Eleкtro en 21 Enero 2014, 23:40 pm
De todas formas aquí tienes un método (muy simple) de uso genérico:

Código
  1.    ' [ Get Application Path ]
  2.    ' ( By Elektro )
  3.    '
  4.    ' Usage Examples :
  5.    ' MsgBox(GetApplicationPath())
  6.    ' MsgBox(GetApplicationPath(True))
  7.  
  8.    ''' <summary>
  9.    ''' Gets the startup application path.
  10.    ''' </summary>
  11.    ''' <param name="FullPath">
  12.    ''' if set to <c>true</c> returns the full path,
  13.    ''' otherwise only returns the directory path.
  14.    ''' </param>
  15.    ''' <returns>System.String.</returns>
  16.    Private Function GetApplicationPath(Optional ByVal FullPath As Boolean = False) As String
  17.  
  18.        Select Case FullPath
  19.  
  20.            Case True
  21.                Return IO.Path.Combine(My.Application.Info.DirectoryPath(),
  22.                                       Process.GetCurrentProcess().MainModule.ModuleName)
  23.  
  24.            Case Else
  25.                Return My.Application.Info.DirectoryPath
  26.  
  27.        End Select
  28.  
  29.    End Function

PD: Utilizo los métodos de My.application porque son compatibles con proyectos de todo tipo sin tener que importar referencias.

Saludos