Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: PETTETE en 28 Julio 2017, 11:47 am



Título: Listar archivos de 2 ficheros
Publicado por: PETTETE en 28 Julio 2017, 11:47 am
Hola buenas,

como bien dice el titulo no se como hacer una lista de los archivos de 2 ficheros.

He abierto las dos carpetas con folderbrowserDialog y al pasar el nombre de los archivos a un excel, me escribe la ruta entera de los archivo...

Como podría hacer que solo escribiera el nombre del archivo?

Código
  1. Sub leer_pdf_y_crear_excel(path, ficheroscarpeta, path2, ficheroscarpeta2, openfolderdialog, openfolderdialog2)
  2.        ' Dim fichero
  3.        Dim xlapp
  4.        Dim xllibro
  5.        Dim xlhoja
  6.        Dim i As Integer = 1
  7.        'Dim fichero
  8.        Dim archivo As String = "*.pdf"
  9.        Dim listbox1 As ListBox
  10.        xlapp = CreateObject("Excel.Application")
  11.        xllibro = xlapp.workbooks.add
  12.        xlhoja = xllibro.worksheets("Hoja1")
  13.        xlapp.visible = True
  14.  
  15.        ficheroscarpeta = System.IO.Directory.GetFiles(path)
  16.        ficheroscarpeta2 = System.IO.Directory.GetFiles(path2)
  17.  
  18.        For Each fichero As String In ficheroscarpeta
  19.            listbox1. = fichero
  20.            xlhoja.cells(i, 1) = fichero
  21.            i += 1
  22.        Next
  23.        For Each fichero As String In ficheroscarpeta2
  24.            xlhoja.cells(i, 1) = fichero
  25.            i += 1
  26.        Next
  27.  
  28.  
  29.  
  30.    End Sub
  31.  
  32.    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  33.        Dim OpenFolderDialog As New FolderBrowserDialog
  34.        Dim path As String
  35.        Dim ficheroscarpeta() As String
  36.  
  37.        Dim OpenFolderDialog2 As New FolderBrowserDialog
  38.        Dim path2 As String
  39.        Dim ficheroscarpeta2() As String
  40.  
  41.        OpenFolderDialog.SelectedPath = "C:\Users\pepe\Desktop"
  42.        OpenFolderDialog2.SelectedPath = "C:\Users\pepe\Desktop"
  43.  
  44.  
  45.        If OpenFolderDialog.ShowDialog() = DialogResult.OK Then
  46.            path = OpenFolderDialog.SelectedPath
  47.  
  48.        End If
  49.  
  50.        If OpenFolderDialog2.ShowDialog() = DialogResult.OK Then
  51.            path2 = OpenFolderDialog2.SelectedPath
  52.            leer_pdf_y_crear_excel(path, ficheroscarpeta, path2, ficheroscarpeta2, OpenFolderDialog, OpenFolderDialog2)
  53.        End If
  54.  
  55.    End Sub
  56.  
  57.  
  58. End Class
  59.  


Título: Re: Listar archivos de 2 ficheros
Publicado por: Eleкtro en 28 Julio 2017, 12:22 pm
Hola.

Como norma general, debes asegurarte de liberar los recursos de las instancias de clases que implementen la interfáz IDisposable:
Código
  1. Dim OpenFolderDialog As New FolderBrowserDialog
  2. Dim OpenFolderDialog2 As New FolderBrowserDialog
No te cuesta nada hacer una llamada a FolderBrowserDialog.Dispose() cuando ya no necesites usar el objeto.

Y estas variables que declaras para instanciar objetos COM de Office:
Citar
Código
  1. Dim xlapp
  2. Dim xllibro
  3. Dim xlhoja
...Debes liberarlos mediante los miembros de la clase System.Runtime.InteropServices.Marshal ( Marshal.FinalReleaseComObject() ) para liberar los recursos no administrados.

Además de eso, las variables en VB.NET deben declararse proporcionando un tipo explícito (en C# no es necesario, todas las variables tienen asignación implícita de tipos ). Estás ignorando por completo la sentencia Option Strict produciendo así un código ininteligible, y en fin, eso que haces es un muy mal hábito de programación.
Deberías escribir arriba en la cabecera de tu clase: Option Strict On e ir arreglando los fallos que te irán saliendo en ese código.

En general todo el código que has mostrado está estructurado de forma ineficiente (por ejemplo la nomenclatura del método "leer_pdf_y_crear_excel", y que además éste cumpla dos funciones distintas en una sola), pero lo más grave es que no te responsabilizas en absoluto de los recursos (consumo de memoria RAM de tu aplicación). Debes leer más sobre ello y pulir la administración de recursos sobre todo.

Esos son algunos de mis consejos varios.



Respondiendo a tu pregunta principal:

Código
  1.        ficheroscarpeta = System.IO.Directory.GetFiles(path)
  2.        ficheroscarpeta2 = System.IO.Directory.GetFiles(path2)
  3.  
  4.        For Each fichero As String In ficheroscarpeta
  5.            listbox1. = fichero
  6.            xlhoja.cells(i, 1) = fichero
  7.            i += 1
  8.        Next
  9.  
  10.        For Each fichero As String In ficheroscarpeta2
  11.            xlhoja.cells(i, 1) = fichero
  12.            i += 1
  13.        Next

Solución:
  • System.IO.FileInfo Class | MSDN (https://msdn.microsoft.com/en-us/library/system.io.fileinfo(v=vs.110).aspx)

...O en su defecto:
  • System.IO.Path.GetFileName() Function | MSDN (https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx)

Ejemplo:
Código
  1. Dim files As IEnumerable(Of FileInfo) = New DirectoryInfo("C:\Directory\").EnumerateFiles("*", SearchOption.TopDirectoryOnly)
  2.  
  3. For Each fi As FileInfo In files
  4.    Debug.WriteLine(fi.Name)
  5. Next fi

Saludos