求一个在某文件夹,查找最新文件的好的算法。

[复制链接]
查看11 | 回复6 | 2021-1-27 06:48:25 | 显示全部楼层 |阅读模式
文件夹里有可能有如下的情况的文件,
test20111121.txt
test20111121(1).txt
test20111121(2).txt
test20111120.txt
test20111119(1).txt
test20111119(2).txt
日期为检索条件,查找该日期下最新的文件,
如 20111121 ,查询结果为test20111121(2).txt
只能按照文件名找,不能按照时间。

分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:48:25 | 显示全部楼层
解决思路:
1、遍历指定文件夹中的所有文件
2、读取创建时间,保存到数组中
DimobjFileInfoAsNewFileInfo("c:\1.xls")
DimdtCreationDateAsDateTime=objFileInfo.CreationTime
3、对数据进行操作

回复

使用道具 举报

千问 | 2021-1-27 06:48:25 | 显示全部楼层
引用1楼xcztb的回复:解决思路:
1、遍历指定文件夹中的所有文件
2、读取创建时间,保存到数组中
DimobjFileInfoAsNewFileInfo("c:\1.xls")
DimdtCreationDateAsDateTime=objFileInfo.CreationTime
3、对数据进行操作

如果只找最新的一个,可以不保存所有文件的信息,只记住最新的就好了。
要是找多个就得保存了。
感觉没什么太神奇的方法,只能遍历+查找
回复

使用道具 举报

千问 | 2021-1-27 06:48:25 | 显示全部楼层

varfile=Directory.GetFiles("").Select(f=>newFileInfo(f))
.OrderByDescending(file=>file.CreationTime)
.FirstOrDefault();

回复

使用道具 举报

千问 | 2021-1-27 06:48:25 | 显示全部楼层
如果阁下都是这样test+8位时间+(数字).txt格式的话,代码如下
PublicClassForm1
'首先确认你的文档是这种形式---test20111123(15).txt
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DimstrFileAsString()=System.IO.Directory.GetFiles("C:\test")
IfstrFile.Length>0Then
DimaArrayAsNewArrayList
DimstrTempAsString
Dimi,jAsInteger
Fori=0TostrFile.Length-1
IfUCase(Microsoft.VisualBasic.Right(strFile(i),4))=".TXT"Then'筛选txt文本
j=0
DoWhile(Mid(strFile(i),Len(strFile(i))-4-j,1))"\"
j+=1
Loop
strTemp=Mid(strFile(i),Len(strFile(i))-j+1,j-4)'取文件名称如test20111123(1)
aArray.Add(strTemp)
EndIf
Next
IfaArray.Count>0Then
DimmaxAsString
max=aArray.Item(0)
Fori=1ToaArray.Count-1
max=Compare(max,aArray.Item(i))
Next
MsgBox("要查找的最新文件名为"&max)
EndIf
EndIf
EndSub
PrivateFunctionCompare(ByValaAsString,ByValbAsString)AsString
DimstrA1,strA2,strB1,strB2AsString
IfInStr(a,"(")Then
strA2=Mid(a,InStr(a,"(")+1,InStr(a,")")-InStr(a,"("))
Else
strA2="0"
EndIf
strA1=Mid(a,1,InStr(a,"("))
IfInStr(b,"(")Then
strB2=Mid(b,InStr(b,"(")+1,InStr(b,")")-InStr(b,"("))
Else
strB2="0"
EndIf
strB1=Mid(b,1,InStr(b,"("))
IfVal(strB1)>Val(strA1)Then
Returnb
ElseIfVal(strB1)=Val(strA2)Then
Returnb
Else
Returna
EndIf
EndIf
EndFunction
EndClass

回复

使用道具 举报

千问 | 2021-1-27 06:48:25 | 显示全部楼层
发现一个错误修正一下.
PublicClassForm1
'首先确认你的文档是这种形式---test20111123(15).txt
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DimstrFileAsString()=System.IO.Directory.GetFiles("C:\test")
IfstrFile.Length>0Then
DimaArrayAsNewArrayList
DimstrTempAsString
Dimi,jAsInteger
Fori=0TostrFile.Length-1
IfUCase(Microsoft.VisualBasic.Right(strFile(i),4))=".TXT"Then'筛选txt文本
j=0
DoWhile(Mid(strFile(i),Len(strFile(i))-4-j,1))"\"
j+=1
Loop
'从test20111123(1).txt取文件名称如20111123(1)
strTemp=Mid(strFile(i),Len(strFile(i))-j+1,j-4)
aArray.Add(strTemp)
EndIf
Next
IfaArray.Count>0Then
DimmaxAsString
max=aArray.Item(0)
Fori=1ToaArray.Count-1
max=Compare(max,aArray.Item(i))
Next
MsgBox("要查找的最新文件名为test"&max&".txt")
EndIf
EndIf
EndSub
PrivateFunctionCompare(ByValaAsString,ByValbAsString)AsString
DimstrA1,strA2,strB1,strB2AsString
IfInStr(a,"(")Then
strA1=Mid(a,1,InStr(a,"(")-1)
strA2=Mid(a,InStr(a,"(")+1,InStr(a,")")-InStr(a,"("))
Else
strA1=a
strA2="0"
EndIf
IfInStr(b,"(")Then
strB1=Mid(b,1,InStr(b,"(")-1)
strB2=Mid(b,InStr(b,"(")+1,InStr(b,")")-InStr(b,"("))
Else
strB1=b
strB2="0"
EndIf
IfVal(strB1)>Val(strA1)Then
Returnb
ElseIfVal(strB1)=Val(strA2)Then
Returnb
Else
Returna
EndIf
EndIf
EndFunction
EndClass

回复

使用道具 举报

千问 | 2021-1-27 06:48:25 | 显示全部楼层
对于文件夹下test20111123(0).txttest20111123.txt适用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行