Listar archivos de 2 ficheros

Iniciado por PETTETE, 28 Julio 2017, 11:47 AM

0 Miembros y 1 Visitante están viendo este tema.

PETTETE

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 (vbnet) [Seleccionar]
Sub leer_pdf_y_crear_excel(path, ficheroscarpeta, path2, ficheroscarpeta2, openfolderdialog, openfolderdialog2)
       ' Dim fichero
       Dim xlapp
       Dim xllibro
       Dim xlhoja
       Dim i As Integer = 1
       'Dim fichero
       Dim archivo As String = "*.pdf"
       Dim listbox1 As ListBox
       xlapp = CreateObject("Excel.Application")
       xllibro = xlapp.workbooks.add
       xlhoja = xllibro.worksheets("Hoja1")
       xlapp.visible = True

       ficheroscarpeta = System.IO.Directory.GetFiles(path)
       ficheroscarpeta2 = System.IO.Directory.GetFiles(path2)

       For Each fichero As String In ficheroscarpeta
           listbox1. = fichero
           xlhoja.cells(i, 1) = fichero
           i += 1
       Next
       For Each fichero As String In ficheroscarpeta2
           xlhoja.cells(i, 1) = fichero
           i += 1
       Next

     

   End Sub
 
   Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
       Dim OpenFolderDialog As New FolderBrowserDialog
       Dim path As String
       Dim ficheroscarpeta() As String

       Dim OpenFolderDialog2 As New FolderBrowserDialog
       Dim path2 As String
       Dim ficheroscarpeta2() As String

       OpenFolderDialog.SelectedPath = "C:\Users\pepe\Desktop"
       OpenFolderDialog2.SelectedPath = "C:\Users\pepe\Desktop"


       If OpenFolderDialog.ShowDialog() = DialogResult.OK Then
           path = OpenFolderDialog.SelectedPath

       End If

       If OpenFolderDialog2.ShowDialog() = DialogResult.OK Then
           path2 = OpenFolderDialog2.SelectedPath
           leer_pdf_y_crear_excel(path, ficheroscarpeta, path2, ficheroscarpeta2, OpenFolderDialog, OpenFolderDialog2)
       End If

   End Sub

 
End Class
UN SALUDO DE VUESTRO AMIGO Y VECINO,
PETETE;)

Eleкtro

#1
Hola.

Como norma general, debes asegurarte de liberar los recursos de las instancias de clases que implementen la interfáz IDisposable:
Cita de: PETTETE en 28 Julio 2017, 11:47 AM
Código (vbnet) [Seleccionar]
Dim OpenFolderDialog As New FolderBrowserDialog
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 (vbnet) [Seleccionar]
Dim xlapp
Dim xllibro
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:

Cita de: PETTETE en 28 Julio 2017, 11:47 AM
Código (vbnet) [Seleccionar]
       ficheroscarpeta = System.IO.Directory.GetFiles(path)
       ficheroscarpeta2 = System.IO.Directory.GetFiles(path2)

       For Each fichero As String In ficheroscarpeta
           listbox1. = fichero
           xlhoja.cells(i, 1) = fichero
           i += 1
       Next

       For Each fichero As String In ficheroscarpeta2
           xlhoja.cells(i, 1) = fichero
           i += 1
       Next


Solución:

...O en su defecto:

Ejemplo:
Código (vbnet) [Seleccionar]
Dim files As IEnumerable(Of FileInfo) = New DirectoryInfo("C:\Directory\").EnumerateFiles("*", SearchOption.TopDirectoryOnly)

For Each fi As FileInfo In files
   Debug.WriteLine(fi.Name)
Next fi


Saludos