使用目录中的每个FileType填充ComboBox

时间:2014-09-28 09:46:04

标签: vb.net list combobox

基本上,我有一个ComboBox,我希望从特定的File Extensions填充Directory

目前,我正在使用:

Dim dir = "C:\"
For Each file As String In System.IO.Directory.GetFiles(dir)
   cmb_FileTypes.Items.Add(System.IO.Path.GetExtension(file))
Next

这不能正常工作,因为它基本上加载了目录中所有文件的所有扩展名。我想要它,以便它显示每个文件类型。例如,如果有10个文件:

  • File1.jpg
  • File2.jpg
  • File3.png
  • File4.mp3
  • File5.mp3
  • File6.dat
  • File7.dat
  • File8.tif
  • File9.jpg
  • File10.mp3

在这10个文件中,有6个文件扩展名是不同的文件扩展名:

  • .jpg的
  • MP3
  • 的DAT
  • TIF

如何将每个1个这些文件扩展名加载到ComboBox而不是重复它?

2 个答案:

答案 0 :(得分:2)

使用LINQ在一个批量中添加组合框的所有扩展名。

cmb_FileTypes.Items.AddRange((From name In Directory.GetFiles(dir) Select Path.GetExtension(name).Replace(".", "") Distinct).ToArray())

答案 1 :(得分:1)

您可以使用LINQ对扩展程序进行分组

For Each file As String In Directory.GetFiles(dir).[Select](Function(p) Path.GetExtension(p)).Distinct().OrderBy(Function(p) p).ToList()
    cmb_FileTypes.Items.Add(System.IO.Path.GetExtension(file))
Next

或者您可以创建一个返回包含唯一扩展名的List<string>的方法。

Public Function UniqueExtensions(filenames As String()) As List(Of String)
    Dim extSet As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase)
    For Each file As String In filenames
        extSet.Add(System.IO.Path.GetExtension(file))
    Next
    Return extSet.ToList()
End Function