6

我需要从名称中包含特定字符的目录中获取文件:下面的代码将返回任何带有.csv扩展名的文件。问题是我需要留下其他 csv 文件或不获取。

Dim FileLocation As DirectoryInfo = _
 New DirectoryInfo("C:\Folder\Subfolder\Data\Input\")

Dim fi As FileInfo() = FileLocation.GetFiles("*.csv")

我不想获取任何 csv 文件,而是想获取一个带有单词data的文件,因此任何包含单词 data 的文件名。示例:*my_data_file.csv*

如何使用上面的代码执行此操作?

4

5 回答 5

6

您可以使用要考虑的字符串更新过滤器(将自动处理大写):

Dim fi As FileInfo() = FileLocation.GetFiles("*data*.csv")

无论如何,请记住,这种过滤不是“太准确”。例如,上面的代码还可以解释任何文件(包括“数据”),其扩展名包括 csv(例如,*.csva、*.csvb 等)。如果您想要一个 100% 可靠的方法,您最好设置一个循环并“手动”执行过滤;循环非常快,你甚至不会注意到差异。

循环示例:

Dim fi As List(Of FileInfo) = New List(Of FileInfo)
For Each File In FileLocation.GetFiles()
    If (File IsNot Nothing) Then
        If (Path.GetExtension(File.ToString.ToLower) = ".csv") Then
            If (File.ToString.ToLower.Contains("data")) Then fi.Add(File)
        End If
    End If
Next

此代码将在您的确切要求下确保工作,并且可能会处理更复杂的请求。我已经占了一个List只是为了更清楚地表明这一点。

于 2013-10-16T17:16:03.357 回答
3

如果您可以使用 LINQ 扩展,那么您可以这样做:

' Get Files {directory} {recursive} {ext} {word in filename}
Private Function Get_Files(ByVal directory As String, _
                           ByVal recursive As IO.SearchOption, _
                           ByVal ext As String, _
                           ByVal with_word_in_filename As String) As List(Of IO.FileInfo)

    Return IO.Directory.GetFiles(directory, "*" & If(ext.StartsWith("*"), ext.Substring(1), ext), recursive) _
                       .Where(Function(o) o.ToLower.Contains(with_word_in_filename.ToLower)) _
                       .Select(Function(p) New IO.FileInfo(p)).ToList

End Function

使用示例:

    For Each file As IO.FileInfo In Get_Files("C:\Folder\Subfolder\Data\Input\", _
                                              IO.SearchOption.TopDirectoryOnly, _
                                              "csv", _
                                              "data")
        MsgBox(file.Name)

    Next
于 2013-10-16T19:18:21.863 回答
1

我会将此作为评论添加到已接受的答案中,但我没有足够的积分来这样做:

我只是想添加 varocarbas 的答案,如果有人想知道(就像我一样)这是否也适用于 Web 场景,它会的。只需将 web 路径放在里面,Server.MapPath()如下所示:

Dim FileLocation As DirectoryInfo = 
 New DirectoryInfo(Server.MapPath("/Folder/SubFolder/Data/Input/"))

注意:不适用于完整的网址(没有“ http://www.123.com ”)。

于 2015-05-21T16:24:32.970 回答
1

将“ . ”下方的通配符搜索替换为您的搜索条件,例如您想要所有以名称“Hospital*”开头的文件


Dim Folder As New IO.DirectoryInfo("C:\SampleFolder")

For Each File as IO.FileInfo in Folder.GetFiles("*.*",IO.SearchOption.AllDirectories)
       ListBox1.Items.Add(File.FullName)
Next
于 2017-10-24T20:08:19.220 回答
0
Dim Folder As New IO.DirectoryInfo("C:\SampleFolder")
For Each File as IO.FileInfo in Folder.GetFiles("*.*",IO.SearchOption.AllDirectories)
    ListBox1.Items.Add(File.FullName)
    Application.DoEvents()
Next
于 2014-12-29T06:06:29.117 回答