我需要从包含特定字符的目录中获取文件的名称:
以下代码将返回任何带有.csv
扩展名的文件。问题是还有其他csv文件我需要单独留下或不能得到。
Dim FileLocation As DirectoryInfo = _
New DirectoryInfo("C:\Folder\Subfolder\Data\Input\")
Dim fi As FileInfo() = FileLocation.GetFiles("*.csv")
我想获取一个带有 data 一词的文件,而不是获取任何csv文件,因此任何包含单词data的文件名都是如此。示例: * my_data_file.csv *
如何使用上面的代码执行此操作?
答案 0 :(得分:2)
您可以使用您想要考虑的字符串更新过滤器(将自动处理上限):
Dim fi As FileInfo() = FileLocation.GetFiles("*data*.csv")
在任何情况下,请记住,此过滤不太准确"。例如,上面的代码还会考虑任何文件(包括"数据"),其扩展名包括 csv
(例如,* .csva,* .csvb,等等。)。如果你想要一个100%可靠的方法,你应该更好地设置一个循环并执行过滤"手动&#34 ;;循环非常快,你甚至不会注意到差异。
循环示例:
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
只是为了更清楚地表明这一点。
答案 1 :(得分:1)
如果您可以使用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
答案 2 :(得分:0)
我会将此作为对已接受答案的评论添加,但我没有足够的分数来这样做:
我只是想添加varocarbas的答案,如果有人想知道(就像我一样)这是否也适用于网络场景,它会。只需将网络路径放在Server.MapPath()
内,如下所示:
Dim FileLocation As DirectoryInfo =
New DirectoryInfo(Server.MapPath("/Folder/SubFolder/Data/Input/"))
注意:不会使用完整网址(不是' http://www.123.com')。
答案 3 :(得分:0)
替换下面的通配符搜索" 。"根据您的搜索条件,例如,您希望所有以name" 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
答案 4 :(得分:-1)
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