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?
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
Hola.
Como norma general, debes asegurarte de liberar los recursos de las instancias de clases que implementen la interfáz
IDisposable:
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:
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:
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:
- 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:
Dim files As IEnumerable
(Of FileInfo
) = New DirectoryInfo
("C:\Directory\").
EnumerateFiles("*", SearchOption.
TopDirectoryOnly)
For Each fi
As FileInfo In
files Next fi
Saludos