我在FTP服务器中有数千个文件,我可以使用Windows资源管理器连接。日复一日,在晚上,我必须找到今天更改(上传)的文件并取其名字。 我想开发一个Visual Basic批处理应用程序,只需运行带有参数(日期)的EXE,就可以获取这些文件的名称列表。
最近我在这里找到了这段代码:
source = "\\ftp_my\Upload\"
searchfor = "*"
Dim dirs As String() = Directory.GetFiles(source, searchfor)
For Each file In dirs
fileinfo = New FileInfo(file)
If (fileinfo.LastWriteTime >= DateAdd(DateInterval.Day, -1, Date.Today)) Then
'execute my actions
End If
Next
但是列出所有文件并评估其属性需要花费不可思议的时间。另一方面,如果我只是制作一个“dir”,导出到excel,拆分文本并手动评估我想要的日期/文件,我早于VB完成该研究!
因此应该有一个命令列出在合理期间按日期DESC排序的文件,是吗?
答案 0 :(得分:2)
我注意到的一些事情可能会减慢你的迭代速度。
您正在将每个文件名转换为fileinfo对象,而不是使用fileinfo对象的集合。
您要为每个文件计算要检查的目标日期,而不是计算一次。
这是一种使用LINQ执行所需操作的方法,该LINQ将在不到5秒的时间内在映射的网络驱动器上找到1000个文件(最糟糕的情况):
Dim source = New DirectoryInfo("\\ftp_my\Upload\")
Dim searchfor = "*"
Dim TargetDate = DateAdd(DateInterval.Day, -1, Date.Today)
Dim dirs = (From f As FileInfo In source.GetFiles(searchfor)
Where f.CreationTime >= TargetDate
Select f).ToList
dirs将包含您要定位的每个文件的所有fileinfo对象。
如果通过dirs迭代并在每个文件上完成操作需要很长时间,那么这将告诉您花费的时间,并且您可以开始查看该代码并开始优化它以缩短时间。