none
aceptar varias extensiones

    Pregunta

  • mi pregunta es como poder hacer que el listbox solo me acepte algunas extensiones y me las muestre con solo el nombre hay un directorio que contiene muchas exenciones solo deseo que me deje recolectar las extensiones que yo quiero solo el nombre del archivo. 

    ListBox1.Items.Clear()
    
      For Each archivos As String In Directory.GetFiles(Label1.Text, _
    
                                                     "*.pdf" & "*.doc" & "*.txt", _
                                                     SearchOption.AllDirectories)
                ListBox1.Items.Add(Path.GetFileNameWithoutExtension(archivos))



    • Editado Cael1020 lunes, 3 de octubre de 2016 18:24
    lunes, 3 de octubre de 2016 15:41

Respuestas

  • Si perdón disculpe una pregunta si tuviera la ruta escrita en un TextBox, como cambiaría el Dialo.... por un TextBox 

    Dim ListaExtensiones As New List(Of String)() From {".txt", ".pdf", ".doc"}
    
    lbxArchivos.Items.Clear()
    
    For Each archivo As String In IO.Directory.GetFiles(
    				txtRuta.Text,
    				"*.*",
    				IO.SearchOption.AllDirectories)
    	If ListaExtensiones.Contains(Path.GetExtension(archivo)) Then
    		lbxArchivos.Items.Add(Path.GetFileNameWithoutExtension(archivo))
    	End If
    Next



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Cael1020 lunes, 3 de octubre de 2016 20:20
    lunes, 3 de octubre de 2016 20:16

Todas las respuestas

  • Cael1020,

    Entiendo que el parámetro 'searchPattern' no permite componer la búsqueda bajo distintas extensiones, por tanto podemos obtener todos los archivos de la ruta especificada '*.*' y luego filtrar los resultados:

    Dim fbd As New FolderBrowserDialog()
    
    If fbd.ShowDialog() = DialogResult.OK Then
    
    	lbxArchivos.Items.Clear()
    
    	For Each archivo As String In IO.Directory.EnumerateFiles(
    			fbd.SelectedPath,
    			"*.*",
    			IO.SearchOption.AllDirectories).
    			Where(Function(f) f.EndsWith(".pdf") OrElse f.EndsWith(".txt") OrElse f.EndsWith(".doc"))
    		lbxArchivos.Items.Add(Path.GetFileNameWithoutExtension(archivo))
    	Next
    End If



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 3 de octubre de 2016 16:17
  • Hola Cael1020,

    Puedes obtener todos los archivos y mediante una expresión regular obtener los archivos que coincidan con el patrón.

    For Each archivos As String In Directory.GetFiles(Label1.Text, "*.*",
                                     SearchOption.AllDirectories).
                                     Where(Function(f) Regex.IsMatch(f, "^.+\.(pdf|doc|txt)$"))
       ListBox1.Items.Add(Path.GetFileNameWithoutExtension(archivos))
    Next

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 3 de octubre de 2016 16:29
  • Así a la vista es difícil decirlo. Para el ratón encima de la parte subrayada y lee el mensaje que te sale en el tooltip. Por ejemplo, podría ser que tengas una versión antigua de VB, de las que no permitían partir una sentencia en varias líneas sin añadir al final el carácter de continuación de sentencia. O puede ser que no tengas importado el espacio de nombres System.Linq y or eso no te admita el Where.
    lunes, 3 de octubre de 2016 17:26
  • Perdón muestro mi pantalla completamuestro mi pantalla completa
    • Editado Cael1020 lunes, 3 de octubre de 2016 18:07
    lunes, 3 de octubre de 2016 18:07
  • Perdónmuestro mi pantalla completa
    lunes, 3 de octubre de 2016 18:12
  • Cael1020,

    ¿Que versión de .NET Framework tienes? ¿La versión de .Net Framework te permite el uso de LinQ? ¿Tienes declarado el uso del espacio de nombres de LinQ?

    Imports System.Linq

    La función EnumerateFiles() está disponible a partir de la versión 4 de .NET Framework, es posible que tengas una versión anterior, de ser el caso queda usar la función GetFiles()

    For Each archivo As String In IO.Directory.GetFiles(

    En caso la versión de .Net Framework no te permita hacer uso de LinQ (disponible a partir de la versión 3.5) una salida es validar la extensión en cada iteración:

    Dim ListaExtensiones As New List(Of String)() From {".txt", ".pdf", ".doc"}
    
    Dim fbd As New FolderBrowserDialog()
    
    If fbd.ShowDialog() = DialogResult.OK Then
    
    	lbxArchivos.Items.Clear()
    
    	For Each archivo As String In IO.Directory.GetFiles(
    					fbd.SelectedPath,
    					"*.*",
    					IO.SearchOption.AllDirectories)
    		If ListaExtensiones.Contains(Path.GetExtension(archivo)) Then
    			lbxArchivos.Items.Add(Path.GetFileNameWithoutExtension(archivo))
    		End If
    	Next
    End If


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 3 de octubre de 2016 18:43
  • ocupo NET Framework 2.0, si veo me presenta varios errores
    • Editado Cael1020 lunes, 3 de octubre de 2016 19:03
    lunes, 3 de octubre de 2016 19:03
  • ocupo NET Framework 2.0, si veo me presenta varios errores

    Si el objetivo de los ejercicios es entrenamiento te recomiendo descargar una versión reciente, podrías descargar Visual Studio Community 2015.

    En tanto, la clase List<T> está disponible desde la versión 2.0 de .NET Framework, no deberías tener problemas con el último código propuesto, ¿probaste ejecutar? ¿obtienes algún error?


    lunes, 3 de octubre de 2016 19:12
  • entonces para esta versión como seria completo el código para ver la diferencia?
    lunes, 3 de octubre de 2016 19:20
  • entonces para esta versión como seria completo el código para ver la diferencia?

    He colocado el código en el aporte anterior, lo vuelvo a poner:

            Dim ListaExtensiones As New List(Of String)() From {".txt", ".pdf", ".doc"}
    
            Dim fbd As New FolderBrowserDialog()
    
            If fbd.ShowDialog() = DialogResult.OK Then
    
                lbxArchivos.Items.Clear()
    
                For Each archivo As String In IO.Directory.GetFiles(
                                fbd.SelectedPath,
                                "*.*",
                                IO.SearchOption.AllDirectories)
                    If ListaExtensiones.Contains(Path.GetExtension(archivo)) Then
                        lbxArchivos.Items.Add(Path.GetFileNameWithoutExtension(archivo))
                    End If
                Next
            End If


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 3 de octubre de 2016 19:27
  • Si perdón disculpe una pregunta si tuviera la ruta escrita en un TextBox, como cambiaría el Dialo.... por un TextBox 
    lunes, 3 de octubre de 2016 20:01
  • Si perdón disculpe una pregunta si tuviera la ruta escrita en un TextBox, como cambiaría el Dialo.... por un TextBox 

    Dim ListaExtensiones As New List(Of String)() From {".txt", ".pdf", ".doc"}
    
    lbxArchivos.Items.Clear()
    
    For Each archivo As String In IO.Directory.GetFiles(
    				txtRuta.Text,
    				"*.*",
    				IO.SearchOption.AllDirectories)
    	If ListaExtensiones.Contains(Path.GetExtension(archivo)) Then
    		lbxArchivos.Items.Add(Path.GetFileNameWithoutExtension(archivo))
    	End If
    Next



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Cael1020 lunes, 3 de octubre de 2016 20:20
    lunes, 3 de octubre de 2016 20:16