如何使用DirectoryInfo类检索文件名指定字符范围内包含指定字符串的文件
实现步骤
你需要在现有时间筛选的基础上,补充文件名长度校验、指定区间截取、字符串匹配三个逻辑,注意.NET中字符串索引从0开始,第22到29位对应索引21到28,截取长度为8。
核心筛选逻辑
- 先判断文件名长度≥29,避免短文件名触发索引越界异常
- 用
Substring(21,8)截取文件名第22到29位的内容 - 判断截取的内容包含目标字符串
inscriz
你可以把公共筛选逻辑封装为统一委托,避免重复写4遍相同条件,修改后的完整代码如下:
Public Sub SpostaFile(sourceDirectory As String, ByVal destDirectory As String) Try Dim from_date As DateTime = DateTime.Now.AddHours(-24) Dim to_date As DateTime = DateTime.Now.AddHours(+24) ' 封装公共筛选条件:时间 + 文件名指定区间匹配 Dim filter As Func(Of FileInfo, Boolean) = Function(fi) ' 先校验文件名长度足够 If fi.Name.Length < 29 Then Return False ' 截取第22-29位(索引21开始,长度8)匹配inscriz Return fi.CreationTime >= from_date AndAlso fi.CreationTime <= to_date AndAlso fi.Name.Substring(21, 8).Contains("inscriz") End Function Try Dim folder As New DirectoryInfo(sourceDirectory) Dim pdfList = folder.EnumerateFiles("*.PDF").Where(filter) Dim xlsList = folder.EnumerateFiles("*.XLS").Where(filter) Dim xlsxList = folder.EnumerateFiles("*.XLSX").Where(filter) Dim csvList = folder.EnumerateFiles("*.csv").Where(filter) ' Copy pdf files. For Each file In pdfList file.CopyTo(Path.Combine(destDirectory, file.Name)) Next ' Copy XLS files. For Each file In xlsList file.CopyTo(Path.Combine(destDirectory, file.Name)) Next ' Copy XLSX files. For Each file In xlsxList file.CopyTo(Path.Combine(destDirectory, file.Name)) Next ' Copy CSV files. For Each file In csvList file.CopyTo(Path.Combine(destDirectory, file.Name)) Next Catch ex As Exception MessageBox.Show(ex.Message) End Try Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
可选调整
如果需要忽略大小写匹配,将Contains("inscriz")改为Contains("inscriz", StringComparison.OrdinalIgnoreCase)即可。
内容的提问来源于stack exchange,提问作者Simone
相关产品推荐
相关产品推荐

