Ayuda: Enumerar ficheros

Iniciado por Tomas1982, 14 Septiembre 2016, 17:38 PM

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

Tomas1982

Buenas ante todo: Tengo un código que me enumera la cantidad de ficheros encontrados en un directorio, la cuestión es que quiero  enumerar estos ficheros por tipo de exenciones para poder generar un informe con esa información y no tengo ni la mas mínima idea de como hacerlo, me pudieran ayudar...

Este es parte del código
Código (vbnet) [Seleccionar]


FolderBrowserDialog1.ShowDialog()
TextBox1.Text = FolderBrowserDialog1.SelectedPath
Dim dirpath As String = FolderBrowserDialog1.SelectedPath
filepaths = Directory.GetFiles(dirpath, "*", SearchOption.AllDirectories)
Me.ListBox1.DataSource = filepaths
Me.Text = ListBox1.Items.Count.ToString() & ".Archivos"


Eleкtro

#1
Puedes agrupar los archivos por su extensión de archivo utilizando el método Enumerable.GroupBy() de LINQ. Te escribo un ejemplo:

Código (vbnet) [Seleccionar]
Dim groups As IEnumerable(Of IGrouping(Of String, FileInfo)) =
   New DirectoryInfo(".\").EnumerateFiles("*", SearchOption.TopDirectoryOnly).
                           GroupBy(Of String)(Function(file As FileInfo) file.Extension)

For Each group As IGrouping(Of String, FileInfo) In groups

   Dim sb As New StringBuilder(capacity:=(group.Count * 260)) ' Suggested capacity. 260 = MAX_PATH
   With sb
       .AppendFormat("Group of file extension '{0}'", group.Key)
       .AppendLine()
       .AppendLine(String.Join(Environment.NewLine, group))
   End With
   Console.WriteLine(sb.ToString())

Next group


Resultado de ejecución:
Cita de: Visual StudioGroup of file extension: '.exe'
WindowsApplication1.exe
WindowsApplication1.vshost.exe

Group of file extension: '.config'
WindowsApplication1.exe.config
WindowsApplication1.vshost.exe.config

Group of file extension: '.pdb'
WindowsApplication1.pdb

Group of file extension: '.xml'
WindowsApplication1.xml

Saludos!








Tomas1982

Mi hermano me funciona perfecto, pero como logro contar la cantidad de fichero por tipo de extensión

Eleкtro

Cita de: Tomas1982 en 14 Septiembre 2016, 20:27 PMcomo logro contar la cantidad de fichero por tipo de extensión

Tomando como ejemplo el código que publiqué arriba, puedes hacerlo de la siguiente manera:

Código (vbnet) [Seleccionar]
Dim groups As IEnumerable(Of IGrouping(Of String, FileInfo)) =
   New DirectoryInfo(".\").EnumerateFiles("*", SearchOption.TopDirectoryOnly).
                           GroupBy(Of String)(Function(file As FileInfo) file.Extension)

Dim totalFileCount As Integer =
   groups.Sum(Function(group As IGrouping(Of String, FileInfo)) group.Count) ' Cantidad total de archivos.

For Each group As IGrouping(Of String, FileInfo) In groups
   Dim fileCount As Integer = group.Count ' Cantidad de archivos de este grupo.
   ...
Next group


Saludos!








Tomas1982

Funciona perfecto lo que mediste: Como siempre resolviendo los problemas de otros. Muchas gracias... ;-)

Lekim

#5
Hola

Para usar sin consola:

Código (vbnet) [Seleccionar]
       Dim groups As IEnumerable(Of IGrouping(Of String, FileInfo)) =
New DirectoryInfo(".\").EnumerateFiles("*", SearchOption.TopDirectoryOnly).
                    GroupBy(Of String)(Function(file As FileInfo) file.Extension)
       For Each group As IGrouping(Of String, FileInfo) In groups
           Dim sb As New StringBuilder(capacity:=(group.Count * 260)) ' Suggested capacity. 260 = MAX_PATH
           With sb
               .AppendFormat("'{0}'", group.Key)
               .AppendLine()
               .AppendLine(String.Join(Environment.NewLine, group))
           End With
           For Each Linea As String In sb.ToString
               TextBox1.Text += Linea
           Next
       Next group








Código (vbnet) [Seleccionar]

       Dim DirInfo As New DirectoryInfo(".\")
       For Each Files As System.IO.FileInfo In DirInfo.GetFiles("*", SearchOption.TopDirectoryOnly)
           TextBox1.Text += String.Format("{0}{1}", Files.ToString, Environment.NewLine)
       Next


S2s