根据多个扩展名检查文件?

时间:2014-06-20 10:05:08

标签: vb.net visual-studio visual-studio-2013

我想知道是否可以检查文件是否与设置扩展列表匹配。目前我有一个工作代码只检查文件,看它是否有.txt .jpg或.mp3

实施例

If (Path.GetExtension(f).ToLower() = ".txt") Then
                ' It's a .txt file
                '         MsgBox("I am a Txt Document")
                b.Image = My.Resources.Text_Img

            ElseIf (Path.GetExtension(f).ToLower() = ".jpg") Then
                b.Image = My.Resources.Img_Img
            Else
                b.Image = My.Resources.Folder_Img
            End If

此代码只是为快捷方式设置图像。我希望能够检查文件是否匹配txt而不是.doc .log 然后所有视频类型mp4 avi mpg。 然后所有音频类型mp3 ogg flacc acc

尝试但失败

ElseIf (Path.GetExtension(f).ToLower() = ".jpg"  & ".png" & ".jpeg" & ".tiff") Then
    b.Image = My.Resources.Img_Img
End If

这是否可能不想添加所有100+扩展,每个扩展都有自己的If语句。 先谢谢你。 -Dan

4 个答案:

答案 0 :(得分:3)

如果你想避免字典路由(除了这是另一种方法之外没有其他正当理由),你可以使用内嵌数组来检查每组扩展。

Dim extension = Path.GetExtension(f).ToLower

If {".txt"}.Contains(extension) Then
    b.Image = My.Resources.Text_Img
ElseIf {".jpg", ".png", ".tif"}.Contains(extension) Then
    b.Image = My.Resources.Img_Img
Else
    b.Image = My.Resources.Folder_Img
End If

我确信使用RegEx和各种LINQ或其他奇怪的方法可以实现完全有效和美观的方法!

答案 1 :(得分:1)

而不是如果你可以从值的字典中查找代码。将字典声明为:

Dim dictionary As New Dictionary(Of String, TheResourceType)
dictionary.Add(".txt", My.Resources.Text_Img)
dictionary.Add(".jpg", My.Resources.Img_Img)
dictionary.Add(".png", My.Resources.Img_Img)
dictionary.Add(".jpeg", My.Resources.Img_Img)
dictionary.Add(".tiff", My.Resources.Img_Img)

问题不清楚b.ImageMy.Resources...值的类型,因此请根据需要更改TheResourceType

使用以下代码访问值:

Dim ext As Path.GetExtension(f).ToLower()
If dictionary.ContainsKey(ext) Then
    b.Image = dictionary.Item(ext)
Else
    b.Image = My.Resources.Folder_Img
End If

答案 2 :(得分:0)

做类似的事情:

Dim extension As String = Path.GetExtension(f).ToLower()

If extension.Equals("txt") Then
    b.Image = My.Resources.Text_Img
ElseIf extension.Equals("jpg") OrElse extension.Equals("png") OrElse extension.Equals("tif") Then
    b.Image = My.Resources.Img_Img
Else
    b.Image = My.Resources.Folder_Img
End If

在上面的代码中,Path.GetExtension()方法只被调用一次,而不是每次都检查扩展名。其次,它使用字符串内置Equals()方法来检查扩展。第三,针对多个扩展的检查语法是固定的 - 查看关于图像文件的第二个条件 - 它与您的略有不同。

答案 3 :(得分:0)

您可能已经考虑过这个,但另一个选项(如果这是常见的需求)将是创建公共扩展的数据库表,然后编写一个函数来查询该表,并将Path.GetExtension作为参数传递。

此类数据库表的详尽扩展列表可在此处找到:http://www.freeformatter.com/mime-types-list.html