ayuda en VB.NET

Iniciado por **Aincrad**, 12 Septiembre 2017, 15:40 PM

0 Miembros y 2 Visitantes están viendo este tema.

**Aincrad**

hola a todos los del foro.

necesito ayuda con parte de un code programado en visual studio 2008

code:

Código (vbnet) [Seleccionar]

Try
          For Each Archivo As String In My.Computer.FileSystem.GetFiles( _
                                   "C:\Users\andres\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup", _
                                   FileIO.SearchOption.SearchAllSubDirectories, _
                                   "*.vbs", _
                                   "*.dll", _
                                   "*.cmd", _
                                   "*.wsf", _
                                   "*.exe", _
                                   "*.ink", _
                                   "*.js", _
                                   "*.html", _
                                   "*.vbe")

               ListBox1.Items.Add(Archivo)
               Form7.Show()
           Next
           ' errores  
       Catch oe As Exception
           MsgBox(oe.Message, MsgBoxStyle.Critical)
       End Try



lo que necesito es que el directorio en la linea 3 del code
cambie el usuario andres por algo como %USERPROFILE% de batch, para que
funcione en otras computadoras.
es porque si quiero correr el code en otra PC que tiene otro usuario funcione.


Los códigos de .NET van en el subforo de .NET




Eleкtro

#1
Hola. Puedes usar la función Environment.GetFolderPath() junto a la enumeración Environment.SpecialFolder:

Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}
Dim dir As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))


Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}\AppData\Roaming
Dim dir As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))


Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Dim dir As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Startup))


Además también puedes expandir el valor de cualquier variable de entorno que esté definida en el sistema operativo:

Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}
Dim dirPath As String = Environment.ExpandEnvironmentVariables("%UserProfile%")


Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}\AppData\Roaming
Dim dirPath As String = Environment.ExpandEnvironmentVariables("%AppData%")


Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Dim dirPath As String = Environment.ExpandEnvironmentVariables("%AppData%\Microsoft\Windows\Start Menu\Programs\Startup")





Con respecto al código que has mostrado:

1. El caracter guión bajo ("_") de linebreak es innecesario escribirlo en versiones actuales de VB.NET. Solo consigue afear el código fuente.

2. Por cuestiones de rendimiento y velocidad de respuesta de la UI, te sugiero sustituir la llamada al método ListBox.Items.Add() por: ListBox.BeginUpdate() + ListBox.Items.AddRange()  + ListBox.EndUpdate(), en ese orden.

3.
Citar
Código (vbnet) [Seleccionar]
Form7.Show()
en cada iteración del búcle estás llamando al método para mostrar ese form... probablemente eso no sea lo que realmente pretendías hacer.

Saludos.








**Aincrad**

#2
gracias electro yo estaba intentando con un codigo similar

Código (vbnet) [Seleccionar]

(Environment.GetFolderPath(Environment.SpecialFolder.Startup))


pero el boto no funcionaba ni lanzaba ningún error.

ahora probe tu code. lo puse de la siguiente manera

Código (vbnet) [Seleccionar]

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim dir As New Directory(Environment.GetFolderPath(Environment.SpecialFolder.Startup)) ' ME MARCA ERROR EN DIR
       Try

           For Each Archivo As String In My.Computer.FileSystem.GetFiles( _
                                   dir, _                                          'ME MARCA ERROR EN DIR
                                   FileIO.SearchOption.SearchAllSubDirectories, _
                                   "*.vbs", _
                                   "*.dll", _
                                   "*.cmd", _
                                   "*.wsf", _
                                   "*.exe", _
                                   "*.ink", _
                                   "*.js", _
                                   "*.html", _
                                   "*.vbe")

               ListBox1.Items.AddRange(Archivo)
           Next
       Catch oe As Exception
           MsgBox(oe.Message, MsgBoxStyle.Critical)
       End Try
   End Sub


AHORA ME MARCAN DOS ERRORES

error en la linea 2 en la palabra dir:

Error   1   Type 'System.IO.Directory' has no constructors.   

error en la linea 6 en la palabra dir:

Error   2   Value of type 'System.IO.Directory' cannot be converted to 'String'.   





Eleкtro

#3
Cita de: **Aincrad** en 12 Septiembre 2017, 17:03 PM

Código (vbnet) [Seleccionar]
Dim dir As New Directory(...)

AHORA ME MARCAN DOS ERRORES

error en la linea 2 en la palabra dir:
Error   1   Type 'System.IO.Directory' has no constructors.   

error en la linea 6 en la palabra dir:
Error   2   Value of type 'System.IO.Directory' cannot be converted to 'String'.   

El código lo has copiado mal. Estoy usando la clase DirectoryInfo, no Directory. De todas formas no es necesario utilizar dicha clase (a menos que le vayas a sacar provecho), puedes declarar un String en su lugar ( Dim dirPath As String = Environment.GetFolderPath(...) ).

Si vas a usar la clase DirectoryInfo, entonces en la linea que he resaltado aquí abajo deberás hacer un cambio para usar la propiedad DirectoryInfo.FullName:
Cita de: **Aincrad** en 12 Septiembre 2017, 17:03 PM
Código (vbnet,2) [Seleccionar]

           For Each Archivo As String In My.Computer.FileSystem.GetFiles( _
                                   dir, _                                          'ME MARCA ERROR EN DIR
                                   ...

...puesto que 'dir' es un objeto (instancia de la clase DirectoryInfo), no es una variable String.

Saludos.








**Aincrad**

  ;-)           Gracias Elektro me ayudaste. si me sirvió.         ;-)