不确定如何说出我的问题标题。但希望这会很快。
我在文件夹中有一堆PDF文件,我想获取某个类型文件的最近修改或创建日期。我的代码有效,但它给了我所有PDF文件的结果。我只想要某些名字的结果。
例如。在我的" c:\ temp \"我有一些PDF文件,它们以大约相同的3个首字母开头,后跟数字或更多字母。
文件名,如tes8796,fes8897895,bas232。等等我只想显示" fes"和" bas"文件,我不想看到" tes"文件...
有什么想法吗?
我认为它应该看起来像这样{" fes * .pdf"," Bas * .pdf"})
我的代码有效,(我只希望获得#34; fes"以及" bas" fils的结果。)
Dim pathx As String = "C:\temp\"
Dim directory = New DirectoryInfo(pathx)
Dim from_date As DateTime = DateTime.Now.AddHours(-24)
Dim to_date As DateTime = DateTime.Now
Dim files = directory.GetFiles().Where(Function(file) file.LastWriteTime >= from_date AndAlso file.LastWriteTime <= to_date)
For Each filx In files
ListBox1.Items.Add(filx)
Next
答案 0 :(得分:0)
您正在调用的GetFiles
方法已超载,并允许您指定要匹配的单个模式。您可以调用该方法两次(每个模式一次),然后组合结果,否则您可以按原样检索所有文件,然后在Where
调用中添加另一个条件,将ny名称过滤为以及日期/时间。
答案 1 :(得分:0)
你非常接近。我会做这样的事情:
Dim pathx As String = "C:\temp\"
Dim directory = New IO.DirectoryInfo(pathx)
Dim from_date As DateTime = DateTime.Now.AddHours(-24)
Dim to_date As DateTime = DateTime.Now
Dim files = directory.GetFiles().Where(Function(file) file.LastWriteTime >= from_date AndAlso file.LastWriteTime <= to_date AndAlso file.Name.EndsWith(".pdf") AndAlso (file.Name.StartsWith("fes") OrElse file.Name.StartsWith("bas")))
For Each filx In files
ListBox1.Items.Add(filx)
Next
答案 2 :(得分:0)
有多种方法可以做到这一点。首先,您可以在开始时应用PDF过滤器:directory.GetFiles("*.pdf")
,然后只需扩展您的功能条件:
Dim names() As String = {"fes", "bas"}
Dim files = di.GetFiles("*.pdf").Where(
Function(file) (file.LastWriteTime >= from_date _
AndAlso file.LastWriteTime <= DateTime.Now) _
AndAlso (names.Contains(file.Name.ToLowerInvariant.Substring(0, 3)))
)
For Each filx In files
Console.WriteLine(filx)
Next
问题在于它依赖于文件起始名称始终永远是3个字符。另外,看看你的代码:一旦你得到了你的数组,你就可以通过它循环将它发布到ListBox。 通常酷孩子使用LINQ来避免循环。所以,要解决这两个问题:
ListBox1.Items.AddRange(di.GetFiles("*.pdf").Where(
Function(f) (f.LastWriteTime >= from_date AndAlso f.LastWriteTime <= DateTime.Now) _
AndAlso names.Any(Function(n) f.Name.ToLowerInvariant.StartsWith(n))
).ToArray)
我删除了已经存在于.NET中的var名称,如Directory
和File
等类型。第二个函数过滤了names数组,然后将结果直接抽入到listbox items集合中。
几乎在所有情况下,普通循环都会更快:
Dim myfiles = directory.GetFiles("*.pdf")
For Each f In myfiles
If f.LastAccessTime >= from_date AndAlso f.LastWriteTime <= DateTime.Now Then
For Each s As String In names
If f.Name.ToLowerInvariant.StartsWith(s.ToLowerInvariant) Then
Console.WriteLine(f)
Exit For ' abort when found
End If
Next
End If
Next
Console.WriteLine
可以添加到项目或根据需要添加到列表。)a 时间差是否重要取决于它的使用方式和负载。如果它连续运行以处理许多文件,那么它可能很重要。作为桌面应用程序的一部分,可能不是。