找回密码
 加入
搜索
楼主: q113960096

[效率算法] 怎么将文件列表按照日期排列【已解决】

 火.. [复制链接]
 楼主| 发表于 2011-12-17 19:40:08 | 显示全部楼层
本帖最后由 q113960096 于 2011-12-17 19:41 编辑

回复 15# 3mile
这个我已经看过,我想要将搜索二层目录和安日期排列结合,找到最新的GHOST文件。谢谢!这好像很困难对我来说,因为总是出错,要么就一层搜索找到最新GHOST文件,不能二层搜索。想要二层搜索就找不到最新的GHOST文件!或许你可以试试!
发表于 2011-12-17 22:28:05 | 显示全部楼层
回复 16# q113960096
简单修改下即可使用.
#include <file.au3>
#include <array.au3>

Global $arr, $num, $str
Global $chen=2
Global $filelist[1][2]
Global $var="chm"

$Drive = DriveGetDrive("FIXED")
For $i = 1 To $Drive[0]
        _filelist($Drive[$i])
Next
_ArraySort($filelist,1,0,0,1)
_ArrayDisplay($filelist)

Func _filelist($searchdir)
        $search = FileFindFirstFile($searchdir & "\*.*") ;;;;查指定目录下的文件
        If $search = -1 Then Return -1 ;;;;如果找不到,返回值 -1
        While 1
                $file = FileFindNextFile($search) ;;;查找下一个文件
                If @error Then ;;;如果找不到文件
                        FileClose($search) ;;;则关闭此句柄
                        Return ;;;返回
                ElseIf $file = "." Or $file = ".." Then ;;如果找到的文件名为.或..则ContinueLoop
                        ContinueLoop ;;;在某些版本的AU3里面可以不需要上行和这行。
                ElseIf StringInStr(FileGetAttrib($searchdir & "\" & $file), "D") Then;;如果找到的是一个文件夹,则
                        $arr = StringRegExp($searchdir & "\" & $file, '\\', 3)
                        $num = UBound($arr)
                        If $num < $chen Then
                                _filelist($searchdir & "\" & $file) ;;递归调用filelist函数,并传参数  "$searchdir & "\" & $file"
                        EndIf
                EndIf ;;;$file为查找到的文件夹名称,上一行意思就是进入此文件夹继续查找文件.如此循环
                If StringRegExp($file, '(?i)^.*?\.'&$var,0) Then ;$str &= $searchdir & "\" & $file & @CRLF;_ArrayAdd($filelist,$searchdir & "\" & $file );MsgBox( 0,0,$searchdir & "\" & $file & @crlf )
                                        ReDim $filelist[UBound($filelist)+1][2]
                                        $filelist[UBound($filelist)-1][0]=$searchdir & "\" & $file
                                        $filelist[UBound($filelist)-1][1]=FileGetTime($searchdir & "\" & $file,1,1)                                        
                                EndIf
        WEnd
EndFunc   ;==>_filelist
发表于 2011-12-18 10:51:49 | 显示全部楼层
又有好源码,谢谢共享
 楼主| 发表于 2011-12-18 18:13:50 | 显示全部楼层
回复 17# 3mile

非常感谢你的帮助。我怎么就没有想到呢!
我之前一直用老外的代码 $filelist[0] 来返回数组维度大小,总是出错,基础知识不行。回头要买本书好好看看! 你的正则表达式很好,我学习了一下,你看对不对。
(?i) = 忽略大小写
^.* = 匹配字符串的开始可以为任意文本
*? = 允许前面字符串重复任意出现或不出现
\. = 查找加上一个英文句号

(?i)^.*?\. = 忽略大小写,匹配字符串的开始可以为任意文本,允许前面字符串重复任意出现或不出现,加上一个英文句号
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-20 21:52 , Processed in 0.067234 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表